C++ std::shared_ptr 会初始化类中的其他成员数据

标签 c++ c++11 constructor initialization

我的问题是: 当我将 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/

相关文章:

c++ - 在编译时已知成员时在函数分支删除中

c++ - 在 bisonc++ 中正确接受括号

c++ - 依赖范围和嵌套模板

c++ - 面向 C/C++ 开发人员的 Eclipse IDE 编译问题

c++ - 在 C++ 中分配命名空间

java - 在构造函数中将对象添加到 arrayList

c++ - C2057 const 值在构造函数初始化列表中定义时出错

c++ - 如何从 C++ 中的类方法正确返回 std::type_info

c++ - 在 C++ 中乘以大数 - 代码有错误吗?如何改进?

c++ - 您如何通过构造函数初始化所有对象?