0

次のコードがあります。

class Node {
    public:
        int data;
        Node* parent;
        std::unique_ptr<Node> left;
        std::unique_ptr<Node> right;
    public:       
        explicit Node(int d) : data(d),
                               parent(nullptr),
                               left(nullptr),
                               right(nullptr) { }
        /*
            Some functions
        */                  
};

class dt {
    private:            
        Node* root;
    private:        
        void add_helper(Node* parent, Node* node); 
        /*
                Some helper functions
        */      
    public:
        dt() : root(nullptr) {}
        ~dt() {
            delete root;
        } 
        /*
                Some functions
        */       
        void add(int data);        
};


void dt::add(int data) {
    if(!root) {
        root = new Node(data); // 1: memory leak
        return;
    }   
    Node* node = new Node(data); // 2: memory leak
    add_helper(root, node);
}

このコードをスキャンしてメモリ リークを探すと、Dr. Memoryは上記のコメントに記載されている行にエラーを表示します。しかし、それらは本当にメモリ リークなのでしょうか。dtには、ルートポインタが削除されるデストラクタがあります。デストラクタがルートノードの削除を開始すると、再帰的に実行され、すべての子が削除されます。それとも他に何かあるのでしょうか?

4

1 に答える 1