2014-01-09 96 views
0

我是否在這個類的析構函數中調用刪除我有沒有在這個析構函數中調用delete?

  1. 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. 指針的向量,以節點:

    class Example { 
    private: 
        vector<Node*> A; 
    public: 
        Node() {} 
        Node(vector<Node*>); 
        ~Node(); 
    }; 
    

在另一類我的項目我從 「新」 分配節點!

+2

這要看情況。從你發佈的代碼中無法分辨出來。 – juanchopanza

+1

我沒有看到任何呼叫「新」。 – PaulMcKenzie

+0

你的'Example'的成員函數應該是'Example',而不是'Node'。 ...和Stackoverflow不是讓別人來做你的工作:你有什麼嘗試,你有什麼問題? –

回答

0

如果您使用new分配節點,則最終需要刪除它們,例如,矢量不會刪除它們,它只會清除矢量本身,而不是指向元素(因爲您有一個指針矢量)。正如你所說,在你的類中建立一個節點的所有權可能有點棘手 - 應該刪除哪個類?這就是爲什麼使用像shared_ptr<>和​​這樣的智能指針可以讓你的生活更輕鬆的原因。

例如

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

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

,那麼你就不需要擔心刪除

+0

謝謝。 我還有一個關於它的問題。 如果我有一個二叉樹,我想要使用簡單的指針,在我的類節點我不得不調用在析構函數中的左右子元素,這是指向節點。通過這種方式,當析構函數被調用時,根不是一個小孩,而是一個指向Node的指針,它不會被刪除,這是真的嗎?我是否還要爲根調用另一個刪除? – Maghio

+0

恕我直言:這感覺就像一個遞歸問題,因此,而不是刪除節點內部有一個清理功能,遞歸地通過在樹葉開始刪除樹。如果刪除節點內部,則必須使每個節點知道它們在樹中的位置,例如我是根嗎?如果你將來想要重新組織樹,移動節點會更麻煩。 –

相關問題