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

时间:2016-11-28 04:36:22

标签: 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有一个默认的ctor,所以B会产生一个隐含的默认ctor 现在我没有引入shared_ptr所以输出将是:

-858993460

但是一旦我将share_ptr引入代码,输出就变成了:

0

为什么呢?是什么导致这种情况发生的?

提前致谢。

我正在使用microsoft blend for VS community 2015版本14.025425.01更新3.

1 个答案:

答案 0 :(得分:1)

隐式默认构造函数将默认初始化标量数据成员,因此它们将具有不确定的值。至于您的测试用例,当您尝试打印未初始化的对象时,它具有未定义的行为。任何输出都是有效的。