我有一个类的构造函数,它使用传递给它的值初始化该类内部的 unique_ptr。出于某种原因,valgrind 抱怨内存泄漏:
1 个块中的 22,080(24 个直接,22,056 个间接)字节在 6 个丢失记录 6 中肯定丢失了 在 0x4C2C7A7:操作员 new(无符号长)(在 /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so 中) 通过 0x4A64FB: VectorBasedNodeOrder::VectorBasedNodeOrder(VectorBasedNodeOrder const&) (VectorBasedNodeOrder.cpp:33) /* 截取更多跟踪 */
这是据称有问题的代码,去掉了所有不相关的东西:
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
{
}
你能解释一下为什么以及如何发生内存泄漏吗?