我可以在这个析构函数中调用delete吗?

时间:2014-01-09 21:05:38

标签: c++ class destructor delete-operator

我是否要在此类的析构函数中调用 delete

  1. 指向Node的2个指针:

    class Node {
    private:
        char Ch;
        int Key;
        Node* L;
        Node* R;
    public:
        Node() { L = NULL; R = NULL; }
        Node(char, int, Node*, Node*);
        ~Node();
    };
    
  2. 指向Node的指针:

     class Example {
     private:
         vector<Node*> A;
     public:
         Node() {}
         Node(vector<Node*>);
         ~Node();
     };
    
  3. 在我的项目的另一个类中,我通过“new”分配节点!

1 个答案:

答案 0 :(得分:0)

如果使用new分配节点,则最终需要删除它们,例如vector不会为你删除它们,它只会清除向量本身但不会清除元素指向的内容(因为你有一个指针向量)。正如您所知,在您的类中建立节点的所有权可能有点棘手 - 应删除哪个类?这就是为什么使用像shared_ptr<>unique_ptr<>这样的智能指针可以让您的生活更轻松。

e.g。

std::shared_ptr<Node> L;
std::shared_ptr<Node> R;

std::vector<std::shared_ptr<Node>> A;

然后您无需担心删除