1. ホーム
  2. c++

[解決済み] このバイナリ・ノード・クラスのデストラクタを作成する適切な方法は何ですか?

2022-02-14 13:20:39

質問

class node{

private:
node* parent;
node* leftchild;
node* rightchild;
// etc.... 
}

私はデストラクタで無限ループを作りたくないので、そのための良いコンストラクタを作る方法に興味があります。

どのように解決するのですか?

呼び出し delete であるポインタに対して NULL はデストラクタを呼び出さない。
ただ、ノードを NULL をコンストラクタで指定し、存在することが前提の場合のみ割り当てるようにします。

そのため、デストラクタでサブオブジェクトを削除しても安全です。 NULL .

#include <iostream>

class Node{
public:
  Node() {
    node = NULL;
  }
  ~Node() {
    std::cout << "Deleting" << std::endl;
    delete node;
  }
  void CreateChildNode() {
    node = new Node();
  }
private:
  Node* node;
};

int main()
{
  Node *n = new Node();
  n->CreateChildNode();
  delete n;
  return 0;
}

上記のコードで出力されます。
削除する
削除する