优先选择make_shared,因其通过单次内存分配提升性能并增强异常安全;当需自定义删除器、管理数组或构造函数非公有时,则必须使用new配合shared_ptr。

C++智能指针,特别是
shared_ptr
make_shared
new
make_shared
new
shared_ptr
当我们谈论
shared_ptr
shared_ptr
new
make_shared
从我的经验来看,大多数时候,我都会倾向于
make_shared
new MyObject()
shared_ptr<MyObject> ptr(new MyObject());
MyObject
shared_ptr
make_shared<MyObject>()
不过,这也不是绝对的。比如,如果我的类构造函数是私有的,或者需要传递一个自定义的deleter(删除器),
make_shared
new
shared_ptr
make_shared
立即学习“C++免费学习笔记(深入)”;
make_shared
make_shared
shared_ptr<T> p(new T(args));
new T(args)
T
shared_ptr
而
make_shared<T>(args)
T
T
从我的角度来看,这就像是打包服务。你单独买个商品,再单独买个包装盒,需要两个交易。而
make_shared
shared_ptr
make_shared
绝大多数情况下,
make_shared
shared_ptr
make_shared
f(shared_ptr<T>(new T()), shared_ptr<U>(new U()));
new T()
new U()
new T()
shared_ptr
make_shared
f(make_shared<T>(), make_shared<U>());
make_shared
make_shared
make_shared
make_shared
make_shared
shared_ptr
new
shared_ptr
简而言之,如果你只是想创建一个普通的
shared_ptr
make_shared
new
shared_ptr
尽管
make_shared
new
shared_ptr
自定义删除器(Custom Deleter): 这是最常见也是最重要的一个理由。当你的对象需要非标准的释放逻辑时,比如管理文件句柄、数据库连接、或者需要返回到对象池而不是直接
delete
make_shared
new
shared_ptr
#include <iostream>
#include <memory>
#include <cstdio> // For FILE*
struct FileCloser {
void operator()(FILE* f) const {
if (f) {
fclose(f);
std::cout << "File closed." << std::endl;
}
}
};
// 使用new和自定义删除器
std::shared_ptr<FILE> file_ptr(fopen("test.txt", "w"), FileCloser{});
// make_shared无法直接支持
// std::make_shared<FILE>(fopen("test.txt", "w"), FileCloser{}); // 编译错误在我看来,这种场景下,
new
shared_ptr
weak_ptr
shared_ptr
weak_ptr
make_shared
weak_ptr
make_shared
weak_ptr
new
shared_ptr
weak_ptr
weak_ptr
数组的shared_ptr
shared_ptr
shared_ptr<int[]>
make_shared
make_shared<int[]>
shared_ptr
new[]
shared_ptr<T[]>
#include <iostream>
#include <memory>
// C++11/14 管理数组
std::shared_ptr<int> arr_ptr_old(new int[10], [](int* p){ delete[] p; });
// C++17及以后,可以这样(但make_shared<int[]>(10) 仍不可用)
std::shared_ptr<int[]> arr_ptr_cxx17(new int[10]);当然,对于数组,
std::vector
shared_ptr
new
总的来说,
make_shared
make_shared
new
shared_ptr
以上就是C++智能指针构造方式 make_shared和new选择的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号