C :为指针成员分配值

C++: Assigning values to pointer members

本文关键字:分配 成员 指针      更新时间:2023-10-16

我有以下代码:

template<class T>
class RandomTreeNode {
private:
    RandomTreeNode<T> *left;
    RandomTreeNode<T> *right;
public:
    RandomTreeNode(): left(0), right(0) {}
    void create_left_child(){ left = &RandomTreeNode<T>();}
    void create_right_child(){ right = &RandomTreeNode<T>();}

但这给了我一个编译错误,因为我指着临时变量的地址。我不希望创建新的RandomTreeNode在功能结束时被破坏,我该如何实现?

使用:

void create_left_child()
{
    left = new RandomTreeNode<T>();
}
void create_right_child()
{
    right = new RandomTreeNode<T>();
}

记住,您必须在不再需要它们时删除它们(可能是在整个树被破坏或该特定节点被删除时)。

这是我的做法:

template<class T>
class RandomTreeNode {
    std::unique_ptr<RandomTreeNode<T> > left;
    std::unique_ptr<RandomTreeNode<T> > right;
    RandomTreeNode(): left(0), right(0) {}
    void create_left_child(){ left.reset(new RandomTreeNode<T>());}
    void create_right_child(){ right.reset(new RandomTreeNode<T>());}
}

不需要破坏者,也不需要手动内存管理。