我有以下代码:
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在函数结束时被销毁,我该如何实现呢?
答案 0 :(得分:8)
使用:
void create_left_child()
{
left = new RandomTreeNode<T>();
}
void create_right_child()
{
right = new RandomTreeNode<T>();
}
请记住,当您不再需要它们时(可能是整个树被破坏,或者当特定节点被删除时),您必须删除它们。
答案 1 :(得分:4)
以下是我的表现:
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>());}
}
不需要析构函数,也不需要手动内存管理。