#include <iostream>
class FooParent
{
public:
FooParent(int* new_p_bar)
{
p_bar = new_p_bar;
}
public:
int* p_bar;
};
class FooChild : public FooParent
{
public:
int bar;
public:
FooChild(int new_x)
:FooParent(&bar)
,bar(new_x) \\ point of concern
{}
};
int main()
{
FooChild foo(8);
std::cout << foo.bar << std::endl;
}
上面的示例按我希望的方式工作.i.e。将指针p_bar
链接到bar
。但是,我担心的是我指向的构造函数尚未被调用。成员指向成员对象和声明顺序的指针
此代码是否有效,或标准有什么可说的。如果不是什么替代方案。
注:在我的应用程序bar
是一个对象Bar
(不int
),但这有什么意义呢?
构造函数将被调用。初始化程序列表中的顺序与构建顺序不同。成员变量按类中的声明顺序进行初始化。 – 2013-03-13 12:09:53
如果'FooParent'的c-tor只存储'Bar'的地址,并且在'FooParent(&bar)'和'bar(new_x)'之间没有其他初始化,那么看起来这里没有问题 – borisbn 2013-03-13 12:09:57
换句话说,它只能使用**指针**(或参考)。不与对象的副本 – borisbn 2013-03-13 12:14:05