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

J.Wei

我的问题是:当我将std::shared_ptrB类引入时,它将为其他数据成员提供零初始化。

代码如下:

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。

0x499602D2

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用其他shared_ptr数据初始化的std :: shared_ptr

来自分类Dev

std :: shared_ptr初始化

来自分类Dev

C++ 中 std::shared_ptr 数组的工作原理

来自分类Dev

使用boost :: shared_ptr <std :: list <T >>初始化boost :: shared_ptr <std :: vector <T >>

来自分类Dev

非静态数据成员初始化器仅与-std = c ++ 11或-std = gnu ++ 11一起提供

来自分类常见问题

在C ++中,空std :: shared_ptr和空std :: shared_ptr有什么区别?

来自分类Dev

使用braced-init初始化std :: shared_ptr <std :: map <>>

来自分类Dev

在C ++中初始化静态std :: map <int,unique_ptr <int >>

来自分类Dev

在C ++ 11中初始化结构的C ++ std :: array

来自分类Dev

C ++ 11中类数据成员的默认初始化

来自分类Dev

使用std :: make_shared以std :: array作为参数来初始化std :: shared_ptr

来自分类Dev

C ++初始化类成员变量取决于其他成员变量

来自分类Dev

std :: vector类成员的初始化

来自分类Dev

内存无法释放std :: list <std :: shared_ptr <std :: string >> C ++

来自分类Dev

使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

来自分类Dev

使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

来自分类Dev

共享指针仅通过std :: shared_ptr初始化。std :: make_shared构造函数不起作用

来自分类Dev

从构造函数中的std :: istream初始化const类数据成员

来自分类Dev

用std :: shared_ptr分配类成员

来自分类Dev

如何将std :: shared_ptr用作类成员?

来自分类Dev

std :: unordered_map插入错误shared_ptr C ++

来自分类Dev

C ++使用指向std :: shared_ptr的Raw指针

来自分类Dev

std :: unordered_map插入错误shared_ptr C ++

来自分类Dev

C ++ std :: shared_ptr参考的reinterpret_cast优化

来自分类Dev

在类的成员初始化器列表中初始化std :: tuple

来自分类Dev

如何在C ++ 11中使用带有std :: thread作为成员的初始化列表

来自分类Dev

警告:非静态数据成员初始化器仅与-std = c ++ 11或-std = gnu ++ 11一起提供[默认启用]

来自分类Dev

使用std :: shared_ptr作为Objective-C中的全局变量

来自分类Dev

使用std :: shared_ptr作为Objective-C中的全局变量

Related 相关文章

  1. 1

    用其他shared_ptr数据初始化的std :: shared_ptr

  2. 2

    std :: shared_ptr初始化

  3. 3

    C++ 中 std::shared_ptr 数组的工作原理

  4. 4

    使用boost :: shared_ptr <std :: list <T >>初始化boost :: shared_ptr <std :: vector <T >>

  5. 5

    非静态数据成员初始化器仅与-std = c ++ 11或-std = gnu ++ 11一起提供

  6. 6

    在C ++中,空std :: shared_ptr和空std :: shared_ptr有什么区别?

  7. 7

    使用braced-init初始化std :: shared_ptr <std :: map <>>

  8. 8

    在C ++中初始化静态std :: map <int,unique_ptr <int >>

  9. 9

    在C ++ 11中初始化结构的C ++ std :: array

  10. 10

    C ++ 11中类数据成员的默认初始化

  11. 11

    使用std :: make_shared以std :: array作为参数来初始化std :: shared_ptr

  12. 12

    C ++初始化类成员变量取决于其他成员变量

  13. 13

    std :: vector类成员的初始化

  14. 14

    内存无法释放std :: list <std :: shared_ptr <std :: string >> C ++

  15. 15

    使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

  16. 16

    使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

  17. 17

    共享指针仅通过std :: shared_ptr初始化。std :: make_shared构造函数不起作用

  18. 18

    从构造函数中的std :: istream初始化const类数据成员

  19. 19

    用std :: shared_ptr分配类成员

  20. 20

    如何将std :: shared_ptr用作类成员?

  21. 21

    std :: unordered_map插入错误shared_ptr C ++

  22. 22

    C ++使用指向std :: shared_ptr的Raw指针

  23. 23

    std :: unordered_map插入错误shared_ptr C ++

  24. 24

    C ++ std :: shared_ptr参考的reinterpret_cast优化

  25. 25

    在类的成员初始化器列表中初始化std :: tuple

  26. 26

    如何在C ++ 11中使用带有std :: thread作为成员的初始化列表

  27. 27

    警告:非静态数据成员初始化器仅与-std = c ++ 11或-std = gnu ++ 11一起提供[默认启用]

  28. 28

    使用std :: shared_ptr作为Objective-C中的全局变量

  29. 29

    使用std :: shared_ptr作为Objective-C中的全局变量

热门标签

归档