我的问题是:
当我将 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
有一个默认构造函数,所以 B 会生成一个隐式默认构造函数。
现在我没有引入 shared_ptr
所以输出将是:
-858993460
但是一旦我将 share_ptr
引入到代码中,输出就变成了:
0
为什么?是什么导致了这种情况?
提前致谢。
我正在为 VS 社区 2015 版本 14.025425.01 更新 3 使用 Microsoft Blend。
最佳答案
隐式默认构造函数将默认初始化您的标量数据成员,因此它们将具有不确定的值。至于您的测试用例,当您尝试打印未初始化的对象时,它具有未定义的行为。任何输出都是有效的。
关于C++ std::shared_ptr 会初始化类中的其他成员数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837251/