我正在尝试调试潜在的内存泄漏。我可以看到在调用msg_ptr
后手动释放mq_timedsend
。
我的问题是mq_timedsend
将邮件发送到队列后是否将邮件释放?
答案 0 :(得分:1)
不,由于各种原因,它不会释放消息,也不会释放消息!
引用的对象可能尚未在第一个实例中动态分配。
无法安全地假设调用者不再使用msg_ptr
指向的对象。
它不能知道它不是一个指向要求析构函数被调用的C ++对象的指针,而不是简单地释放内存块。
简而言之,任何图书馆功能都以你建议的方式行事是不恰当和危险的。作为一般原则,动态分配的内存应该由其所有者删除,除非有一些明确的文档化协议用于放弃所有权 - 这不是一种常见的模式。
在这种情况下,数据被复制到消息队列,因此您可以在发送后自由修改或释放任何msg_ptr
引用。