c++ - 为什么智能指针不能在其构造函数中为我调用 new()?

标签 c++ memory-management smart-pointers

是否可以编写一个智能指针,在其构造函数中分配对象本身 - 而不是开发人员必须调用 new ?换句话说,而不是写:

std::unique_ptr<myClass> my_ptr(new myClass(arg1, arg2))

...可以这样写:

std::smarter_ptr<myClass> my_ptr(arg1, arg2)

语言语法能表达这个吗?这是可取的吗?可怕?我特别想防止这个错误(当然是我自己犯的):

myFunction(std::unique_ptr<myClass>(new myClass()), std::unique_ptr<myClass>(new myClass()))

...如果第二次分配发生并在第一个对象安全地存放在其智能指针中之前抛出,则有泄漏首先分配的对象的风险。但是,更智能的指针真的能让它安全吗?

最佳答案

查看make_shared()的实现.它这样做会分配一个新对象并创建一个 shared_ptr

关于c++ - 为什么智能指针不能在其构造函数中为我调用 new()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689004/

相关文章:

C分配和内存开销

c++ - 在两个 Jenkins 构建中的文件之间运行特定的 diff 命令

c++ - 置换二维数组中的元素

c++ - 带有 2 个列表的面向对象

c++ - 为维数增加(点数)的点云分配 CUDA 设备内存

memory-management - 如何理解IBM/370的内存保护方案?

c++ - 协变虚函数和智能指针

C++ - 传递智能指针派生类

c++ - 在析构函数中访问静态成员的静态对象

c++ - 使用智能指针编写安全的复制构造函数