我有一个类的构造函数,该类用于向该类初始化一个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
- {
- }
你能否解释为什么以及如何发生内存泄漏?