C++类析构函数

wsewodh2  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(138)

如何删除map<char, map<char, char>> board_gamemap<int, char> X_indexlist<Node*>
如何为类TreeNodeBoardgame编写适当的析构函数?

class Search_tree {
    Node* root = nullptr;
    char playerColor;
    list<Node*> leaveNodes;
    
    // Constructor, functions ...

    ~ Search_tree(); <--?
}

class Node {
    Board_game* currentBoard = nullptr;
    Node* parent = nullptr;
    list<Node*> childs;

    // Constructor, functions ...

    ~Node(); <--?
}

class Board_game {
  public:
    // Boardgame
    map<char, map<char, char>> board_game;
    map<int, char> X_index;
    map<int, char> Y_index;
    // Figures
    Position figures[8];

    // Constructor, functions ...

    ~Board_game(); <--?
}

struct Position {
    char x;
    char y;
};
wydwbb8l

wydwbb8l1#

你需要决定谁拥有什么。然后你应该把那些“拥有”的原始指针转换成std::unique_ptr,这样你就不需要手工写析构函数了。一个可能的所有权结构可能是:

class Search_tree {
    std::unique_ptr<Node> root;
    char playerColor;
    list<Node*> leaveNodes;
}

class Node {
    Board_game* currentBoard = nullptr;
    Node* parent = nullptr;
    list<std::unique_ptr<Node>> childs;
}

由于Board_game不包含任何原始指针,因此它已经不需要手写的析构函数。

相关问题