Нужно ли использовать delete после pthread_mutex_destroy? - PullRequest
0 голосов
/ 30 июля 2011

Предположим, я использую

pthread_mutex_t *m = new pthread_mutex_t;
pthread_mutex_init(m, NULL);

для инициализации мьютекса.Затем, когда я закончу и вызову pthread_mutex_destroy, нужно ли мне использовать

delete m;

для освобождения всех ресурсов?

Ответы [ 2 ]

6 голосов
/ 30 июля 2011

Вам нужно освободить память, так как pthread_mutex_destroy не может сделать это за вас .

Почему pthread_mutex_destroy не освобождает память для вас?Поскольку вам разрешено делать это:

pthread_mutex_t m;
pthread_mutex_init(&m, NULL);

pthread_mutex_destroy(&m); /* Can't free &m. */

Вы можете попробовать это, используя valgrind:

==836== LEAK SUMMARY:
==836==    definitely lost: 24 bytes in 1 blocks
2 голосов
/ 30 июля 2011

Инициализация мьютекса с использованием pthread_mutex_init - это другой аспект; и наличие памяти, выделенной для объекта (типа pthread_mutex_t), является другим аспектом.

Использование инициализации Процедура некоторой библиотеки отличается от выделения памяти для нее в куче или в стеке. Это все равно что иметь FILE * в качестве локальной переменной и инициализировать указатель файла, используя fopen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...