当前位置 : 主页 > 编程语言 > java >

[modern c++] std::make_shared 和 std::shared(new)的区别

来源:互联网 收集:自由互联 发布时间:2022-09-29
正文: 分配一个内存 并 新建一个 std::shared_ptr 引用它,有两种方法: 使用 std::make_shared; 使用 std::shared的构造,即 std::shared(new xxx)。 推荐使用 std::make_shared来 分配内存并新建shared指针


正文:

分配一个内存 并 新建一个 std::shared_ptr 引用它,有两种方法:

  • 使用 std::make_shared;
  • 使用 std::shared的构造,即 std::shared(new xxx)。

推荐使用 std::make_shared来 分配内存并新建shared指针。但是make_shared无法指定deletor,因此如果分配的是一个数组,那么需要考察make_shared的底层是不是调用的delete[],如果是则安全,如果不是则存在一定的内存泄露可能性,具体参考:


需要注意的是,从 c++ 20 开始,才可以使用 std::make_shared 来创建数组,具体用法见:

​​std::make_shared, std::make_shared_for_overwrite - cppreference.com

[modern c++] std::make_shared 和 std::shared(new)的区别_c++

https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared​​


网友评论