C ++ std :: shared_ptr,是否operator =重载以使用复制构造函数?

亚历克斯·穆塞尔(Alex Mussell)

如果我执行以下操作:

class Foo
{
    std::shared_ptr<Bar> bar;
    Foo(std::shared_ptr<Bar> bar)
    {
        this->bar = bar;
    }
}
std::shared_ptr<Foo> func()
{
    std::shared_ptr<Bar> bar_ptr(new Bar());
    std::shared_ptr<Foo> foo_ptr(new Foo(bar_ptr));
    return foo_ptr;
}

foo_ptrfunc()在其成员变量酒吧有效的指针?似乎只有在设置this->bar = bar构造函数参数被复制才会如此。=运算符是否std::shared_ptr总是被重写以调用复制构造函数?

橡子

复制构造函数和赋值运算符都将使接收者与您传入的对象共享所有权。但是,它们在内部执行的是实现细节。

当然,如果this->bar正在管理某个东西,那么它将释放它的共享所有权(如果它是拥有它的最后一个所有者,那么Bar那里的所有内容都将被删除)。

但是我在这里担心的是,Foo的构造函数中this-> bar和bar是相同的引用,这意味着内存中实际上只有一个shared_ptr对象,但是我有2个变量引用该shared_ptr。

他们不是引用,bar并且this->bar是两个不同的std::shared_ptr对象,分配后,将在存储点(内部)到同一个地方(但他们仍然是两个不同的对象)。但是,std::shared_ptr是一个类,它知道有多少其他std::shared_ptr对象指向它(共享所有权),并且仅在所有其他对象都消失之后才正确删除该对象(因此只有最后一个对象std::shared_ptr会销毁它)。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有shared_ptr成员的C ++复制构造函数

来自分类Dev

std :: shared_ptr深层复制对象

来自分类Dev

在std :: shared_ptr上使用.reset()是否会删除所有实例

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用std :: shared_ptr和指向成员函数的指针

来自分类Dev

使用std shared_ptr作为std :: map键

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

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

来自分类Dev

使用std :: move与std :: shared_ptr

来自分类Dev

使用std :: shared_ptr的std :: map调用const重载函数

来自分类Dev

如何在boost :: object_pool中使用boost :: shared_ptr / std :: shared_ptr?

来自分类Dev

std :: shared_ptr模板化与非模板化的复制/移动构造函数

来自分类Dev

在信号处理程序中使用`std :: shared_ptr`和`std :: weak_ptr`是否安全?

来自分类Dev

具有别名构造函数的std :: shared_ptr,是否有可能检索初始指针值?

来自分类Dev

使用模板将std :: shared_ptr <Derived>上载到std :: shared_ptr <Base>

来自分类Dev

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

来自分类Dev

使用工厂函数创建std :: shared_ptr

来自分类Dev

具有shared_ptr成员的C ++复制构造函数

来自分类Dev

std :: shared_ptr深层复制对象

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

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

来自分类Dev

std :: shared_ptr模板化与非模板化的复制/移动构造函数

来自分类Dev

使用相同的函数但具有不同的重载来转换std :: tr1 :: shared_ptr <T>和std :: shared_ptr <T>

来自分类Dev

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

来自分类Dev

移动 std::shared_ptr 的函数声明

来自分类Dev

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

Related 相关文章

  1. 1

    具有shared_ptr成员的C ++复制构造函数

  2. 2

    std :: shared_ptr深层复制对象

  3. 3

    在std :: shared_ptr上使用.reset()是否会删除所有实例

  4. 4

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

  5. 5

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

  6. 6

    使用std :: shared_ptr和指向成员函数的指针

  7. 7

    使用std shared_ptr作为std :: map键

  8. 8

    使用* this作为std :: shared_ptr

  9. 9

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

  10. 10

    使用std :: move与std :: shared_ptr

  11. 11

    使用std :: shared_ptr的std :: map调用const重载函数

  12. 12

    如何在boost :: object_pool中使用boost :: shared_ptr / std :: shared_ptr?

  13. 13

    std :: shared_ptr模板化与非模板化的复制/移动构造函数

  14. 14

    在信号处理程序中使用`std :: shared_ptr`和`std :: weak_ptr`是否安全?

  15. 15

    具有别名构造函数的std :: shared_ptr,是否有可能检索初始指针值?

  16. 16

    使用模板将std :: shared_ptr <Derived>上载到std :: shared_ptr <Base>

  17. 17

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

  18. 18

    使用工厂函数创建std :: shared_ptr

  19. 19

    具有shared_ptr成员的C ++复制构造函数

  20. 20

    std :: shared_ptr深层复制对象

  21. 21

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

  22. 22

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

  23. 23

    使用* this作为std :: shared_ptr

  24. 24

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

  25. 25

    std :: shared_ptr模板化与非模板化的复制/移动构造函数

  26. 26

    使用相同的函数但具有不同的重载来转换std :: tr1 :: shared_ptr <T>和std :: shared_ptr <T>

  27. 27

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

  28. 28

    移动 std::shared_ptr 的函数声明

  29. 29

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

热门标签

归档