我什么时候应该选择"shared_ptr"而不是"make_shared"?
When should I prefer `shared_ptr` to `make_shared`?
正如C++中对make_shared和正常shared_ptr差异的回答所指出的那样,在大多数情况下,make_shared
的表现优于shared_ptr
。
那么C++为什么标准同时定义了shared_ptr
和make_shared
呢?有没有我更喜欢shared_ptr
而不是make_shared
的情况,甚至我只能使用shared_ptr
而不能使用make_shared
?
其中一种情况是 std::make_shared 不支持指定自定义删除程序。
与
std::shared_ptr
构造函数不同,std::make_shared
不允许自定义删除器。
您只能使用 std::shared_ptr 的构造函数执行此操作,例如
std::shared_ptr<Foo> sh5(new Foo, [](auto p) {
std::cout << "Call delete from lambda...n";
delete p;
});
另一个问题就像链接的帖子所解释的那样,std::make_shared
只对控制块和指向的对象执行一次分配。这意味着在对象被销毁后,它占用的内存可能不会立即释放。这可能会导致一些内存使用问题。
如果使用私有构造函数(单例模式(声明类,则无法使用make_shared
来构造它,但可以使用shared_ptr
强制转换。
相关文章:
- 引用 std::shared:ptr 以避免引用计数
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 无法使用 libtool 将 -shared 参数传递给 g++
- 'char (*RtlpNumberOf(T (&)[N]))[N]':无法从"char *"
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- 链接 boost 库时"Error while loading shared libraries"引发的,除了我无法使用 root 访问权限来修复它
- "inline"、"constexpr"或"noexcept"
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"
- 我必须安装"libbitcoin-server"才能包含"bitcoin.hpp"
- “并非所有控制路径都返回一个值./&quot“控制可能达到非空隙功能的末端”.验证时循环时
- 如何输出a'&quot在不使用线端的情况下进行文件
- gcc -fPIC vs. -shared
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 删除“按任何键” ..&quot.从VS C 控制台应用程序
- 如何检测我何时向可变参数函数传递"std::string"而不是"c_str()"
- "directory containing symbolic versions of my app's shared libraries"的位置(ndk-stack)
- Qt自定义插件无法加载 - "Shared Library Not Found"
- '&lt;'''&lt;'''&quot的模板类错误''令牌”
- C - Shared Library - dlopen, dlsym