C++:将构造对象的引用传递给构造的成员对象
C++: Passing reference of constructing object to constructed member objects?
好的,考虑以下类:
class Object
{
public:
// Constructor
Object() :
[Initialization List]
{
...
}
...
};
class Container
{
public:
Object A;
Object B;
....
Container() :
[Initialization List]
{
}
};
我想为对象提供[对容器及其成员的访问]。
我的第一个想法是以某种方式将对当前容器对象的引用传递给对象的构造函数。 但是我不知道该怎么做。
我搞砸了"这个",但我没有得到任何有效的东西。 我尝试了这样的事情:
class Object
{
public:
Container& c
// Constructor
Object(Container& c_) :
c(c_)
{
...
}
...
};
class Container
{
public:
Object A;
Object B;
....
Container() :
A(Object(this))
B(Object(this))
{
}
};
我的最终目标是能够从对象 A 的成员方法内部访问对象 B。
有没有人对如何更接近我正在寻找的东西有任何见解?
谢谢!
在初始值设定项列表中使用 this
不一定是 UB 或坏事,尽管需要小心,并且您的代码只需稍作修改即可完全有效。
class Container;
class Object
{
public:
Container& c
// Constructor
Object(Container& c_) :
c(c_)
{
}
};
class Container
{
public:
Object A;
Object B;
Container() :
A(Object(*this))
B(Object(*this))
{
}
};
this
是一个指针,你想要一个引用,一个简单的取消引用就可以了。这是完全合法和定义的代码。不允许通过指针访问任何成员数据或函数,因为这些成员数据或函数在 init 列表完成之前可能根本不存在。但是绝对允许在初始值设定项列表中获取指向对象的指针或引用并将其传递。
只使用指针怎么样?编辑:修复代码以避免在初始值设定项列表中this
。
class Container;
class Object
{
public:
Container *c;
// Constructor
Object(Container *c_) :
c(c_)
{
}
};
class Container
{
public:
Object *A, *B;
Container()
{
A = new Object(this);
B = new Object(this);
}
};
您不应该为正在构造其实例的类的成员传递this
初始值设定项,但您可以稍后传递它,因此有两种简单的方法可以解决问题
- 在构造函数主体中的对象(
A.setContainer(*this)
)上使用二传手 - 创建 A 和 B 指针,将它们初始化为
NULL
并在构造函数的主体中执行A = new Object(this)
相关文章:
- 无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象
- 在C++中,是否可以"overload"作为另一个类成员的对象?
- 指向std::invoke中成员函数对象的指针
- 如何从外部类 (c++) 构造成员类对象
- C++:获取包含成员子对象的完整对象的地址
- 使用各种数据类型成员创建对象的简便方法
- 具有整数成员的对象的 printf
- C 用数组作为成员创建对象
- const引用与可变成员的对象
- 用堆成员删除对象
- 无法用2D矢量成员引用对象
- 移动包含正在运行的 std::thread 成员的对象
- 作为类的私有成员的对象
- 如何使用通用模板函数来处理不同成员的对象?
- 如何初始化具有私有对象成员的对象,该构造函数将非常量引用作为参数
- 无法使用类型 'const char [X]' 的左值初始化类型 'const signed char *' 的成员子对象
- 成员子对象继承存储持续时间是否有任何非直观的副作用
- 指向具有指针成员的对象的指针
- 根据数据成员对对象数组进行排序或筛选
- 如何构造具有unique_ptr成员的对象