好的,请考虑以下课程:
class Object
{
public:
// Constructor
Object() :
[Initialization List]
{
...
}
...
};
class Container
{
public:
Object A;
Object B;
....
Container() :
[Initialization List]
{
}
};
我想向对象提供[访问Container及其成员]。
我的第一个想法是以某种方式将对当前Container对象的引用传递给Objects的构造函数。但我无法弄清楚如何做到这一点。
我用“这个”搞砸了,但我没有得到任何有用的东西。我试过这样的事情:
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.
有没有人对如何更接近我正在寻找的东西有任何见解?
谢谢!
答案 0 :(得分:5)
不 UB 或不一定要在初始化程序列表中使用this
,尽管需要小心,并且您的代码完全有效小修改。
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列表完成之前可能还不存在。但它肯定是允许在它的初始化列表中获取对象的指针或引用并传递它。
答案 1 :(得分:1)
如何使用指针? 修改:修复代码以避免初始化列表中的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);
}
};
答案 2 :(得分:-1)
您不应该在初始化程序中为您正在构建其实例的类的成员传递this
,但您可以稍后传递它,因此有两种简单的方法解决您的问题
A.setContainer(*this)
)上使用setter NULL
并在构造函数体内执行A = new Object(this)