是否可以在构造函数中访问当前的"创建"obj?

Is it possible to access the current 'to create' obj in constructor?

本文关键字:创建 obj 访问 构造函数 是否      更新时间:2023-10-16

我目前正在编写一个树类,并希望实现一个构造函数,用于创建具有一定维度和深度的树:

public:
    tree();                           // empty constructor
    tree(int dimension, int depth);   // constructing an empty tree
    // ...
    void            newNode(node<T>* const&, T const&);
    // ...
  private:
    unsigned int mNumNodes;
    node<T>      *mRoot;

template<typename T>
tree<T>::tree(int dimension, int depth):
  // member vars
{
  // other constructing stuff
  this->newNode(0, parent);
}

显然,这样的事情是不可能的,但我写了一个很好的工作函数,用于将新节点添加到具有特定值的特定父节点,使用它会很好。

BUT:此方法需要访问当前对象。

也许有某种解决方案为我工作既不指向对象是可能的,也没有任何其他类型的访问

问题不在于构造函数。当执行进入构造函数体时,对象被构造为tree<std::basic_string<char> >。这意味着你可以在构造函数体中使用该对象作为该类的实例。

在构造函数中这样使用对象的问题是,如果要构造的实际对象是当前类的派生类。这些知识还不存在于父类的构造函数中。最好不要在构造函数中调用虚函数。从构造函数内部调用非虚成员函数通常是可以的。另一个问题是,派生类的构造函数可能会改变父类中的内容。

这里不是这样的。这里的问题是使用零作为node<T>* const&。这行不通,就这么简单。如果它工作,你可以改变0的值。

根据您发布的不完整代码,在newNode的第一个参数声明中去掉&号将达到目的。