我正在尝试调试潜在的内存泄漏。我可以看到在调用mq_timedsend
后没有手动释放msg_ptr
。
我的问题是,mq_timedsend
将消息发送到队列后是否会释放消息?
不,它不会释放消息,也不应该 - 出于多种原因!
-
引用的对象可能未在第一个实例中动态分配。
-
它不能安全地假定调用方不再使用
msg_ptr
指向的对象。
它 无法知道它不是指向需要调用析构函数的C++对象的指针,而不是简单地释放内存块。
简而言之,任何库函数以您建议的方式运行都是不合适和危险的。 作为一般原则,动态分配的内存应由其所有者删除,除非有一些明确且记录在案的协议来放弃所有权 - 这不是一种常见的模式。
在这种情况下,数据将复制到消息队列中,因此您可以在发送后自由修改或释放任何msg_ptr
引用。