c – 尽管使用unique_ptr,但是内存泄漏

前端之家收集整理的这篇文章主要介绍了c – 尽管使用unique_ptr,但是内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个类的构造函数,该类用于向该类初始化一个unique_ptr,并传递一个值.由于某种原因,valgrind抱怨内存泄漏:
22,080 (24 direct,22,056 indirect) bytes in 1 blocks are definitely lost in loss record 6 of 6
   at 0x4C2C7A7: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x4A64FB: VectorBasedNodeOrder::VectorBasedNodeOrder(VectorBasedNodeOrder const&) (VectorBasedNodeOrder.cpp:33)
   /* snip more trace */

这是涉嫌违规的代码,剥夺了所有无关紧要的东西:

class VectorBasedNodeOrder : public NodeOrder
{
public:
    VectorBasedNodeOrder(const VectorBasedNodeOrder& order);
protected:
    std::unique_ptr<std::vector<Node*>> orderedNodes;
}

VectorBasedNodeOrder::VectorBasedNodeOrder(const VectorBasedNodeOrder& order):
NodeOrder(order),orderedNodes(unique_ptr<std::vector<Node*>>(
    new std::vector<Node*>(*(order.orderedNodes)))) // <-- line 33
{
}

你能否解释为什么以及如何发生内存泄漏?

解决方法

根据您的评论,原始Node指针在别处被管理,而不是问题,我将采取一个野蛮的刺激,即NodeOrder或另一个父进程没有虚拟析构函数,并且当您的VectorBasedNodeOrder被基类指针,孩子析构函数从不被调用,导致unique_ptr永远不会被破坏.
原文链接:https://www.f2er.com/c/114418.html

猜你在找的C&C++相关文章