【发布时间】:2013-03-13 12:01:11
【问题描述】:
#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;
}
上面的示例按我的意愿工作。即将指针p_bar 链接到bar。但是,我担心的是我指向的成员的构造函数尚未调用。
此代码是否有效,或者标准对此有什么要说的。如果不是,还有什么办法。
注意:在我的应用程序中bar 是一个对象Bar(不是int),这有什么影响吗?
【问题讨论】:
-
构造函数将被调用。初始化列表中的顺序与构造顺序不同。成员变量按照在类中的声明顺序进行初始化。
-
如果
FooParent的c-tor只存储了Bar的地址,而FooParent(&bar)和bar(new_x)之间没有其他初始化,那么看来这里没有问题 -
换句话说,它只适用于指针(或引用)。不是对象的副本
-
@borisbn 所以如果我想使用它,我将不得不实现复制构造函数(和复制赋值运算符)来考虑这一点。对吗?
-
不。复制 c-tor 和赋值运算符都不会对此有所帮助。它只适用于指针(或引用)
标签: c++ pointers inheritance member