我的问题是:
当我将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.
答案 0 :(得分:1)
隐式默认构造函数将默认初始化标量数据成员,因此它们将具有不确定的值。至于您的测试用例,当您尝试打印未初始化的对象时,它具有未定义的行为。任何输出都是有效的。