【发布时间】:2016-11-28 04:36:22
【问题描述】:
我的问题是:
当我将std::shared_ptr 引入B 类时,它会给其他数据成员零初始化。
代码如下:
class A
{
public:
int data_a;
A():data_a(0){}
};
class B
{
public:
int data_b;
A a;
//shared_ptr<B> ptr_b; // the key point here
};
int main()
{
B b;
cout << b.data_b << endl;
}
}
由于成员 a 有一个默认 ctor,因此 B 会生成一个隐式默认 ctor。
现在我没有介绍shared_ptr,所以输出是:
-858993460
但是一旦我将share_ptr 引入代码中,输出变为:
0
为什么?是什么原因造成的?
提前致谢。
我正在使用 microsoft blend for VS community 2015 版本 14.025425.01 更新 3。
【问题讨论】:
-
访问
b.data_b表现出未定义的行为。 Any outcome whatsoever 有效。 -
谢谢。我知道这一点。但是我想知道当我将 shared_ptr
prt_b引入 B 类时,是什么使它生成零初始化?你看,当我做出这样的改变时,结果是 0。 -
您的代码有错误。修复错误,谜团就会消失。如果您的问题是“为什么带有错误的代码会做奇怪的事情”,那是因为这就是错误的本质。
-
如果你知道未定义的行为就是未定义的行为,为什么还要问为什么会这样?它可能出于任何原因发生,但因为它没有任何意义,因为人们不能依赖未定义的行为,所以试图找到原因是没有意义的。
-
哎呀,也许我现在知道未定义的行为是什么意思非常感谢!!
标签: c++ c++11 constructor initialization