假设我使用
pthread_mutex_t *m = new pthread_mutex_t;
pthread_mutex_init(m, NULL);
初始化互斥锁。在我完成之后,调用pthread_mutex_destroy,我是否需要使用
delete m;
发布所有资源?
答案 0 :(得分:6)
您需要释放内存,因为 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
答案 1 :(得分:2)
使用pthread_mutex_init
初始化互斥锁是不同的方面;并且为对象(类型pthread_mutex_t
)分配的内存是不同的方面。
使用某些库的初始化例程与在堆上或堆栈上为其分配内存不同。这就像有一个FILE *作为局部变量,并使用fopen