我的问题是:当我将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用于VS社区2015版本14.025425.01更新3。
隐式默认构造函数将默认初始化标量数据成员,因此它们将具有不确定的值。至于您的测试用例,当您尝试打印未初始化的对象时,它具有未定义的行为。任何输出都是有效的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句