是否可以在构造函数中访问当前的"创建"obj?
Is it possible to access the current 'to create' obj in constructor?
我目前正在编写一个树类,并希望实现一个构造函数,用于创建具有一定维度和深度的树:
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
的第一个参数声明中去掉&号将达到目的。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 如何禁用在工厂方法之外创建/复制 obj?
- 从 Objective-c 委派到 c(或者更好地称之为:创建从 C 到 OBJ-C 的侦听器)
- 我无法在 Flutter 桌面嵌入项目(在 Visual Studio 上)中创建 obj 文件
- 动态数组C++,新 Obj[size] 只创建 1 个对象指针而不是数组时出现问题
- 在 XCode 中创建一个要在 Obj-C 中使用的C++库
- 创建obj时出现错误标头C++
- 为什么在静态创建 OBJ 时调用私有析构函数
- 如何在创建新的 obj() 时调用基类构造函数 new base(argT argV)
- 创建新项目时未生成 helloworld.obj 文件
- 使用C++/Obj-C创建小部件
- 为什么当我创建一个对象数组时调用默认构造函数,但当我将obj创建为简单变量时却出错
- 我的旧Qt项目文件(.pro文件),它正在工作;不创建任何文件(moc_ 或 .obj 文件)。为什么它退出构建步骤什么都不做?
- 构造函数 c++ Object obj = Object( "string" , 22);正在创建临时对象?
- 是否可以在构造函数中访问当前的"创建"obj?
- 用new关键字创建obj和直接创建obj有区别吗?