make_shared和new
时间: 2023-08-03 12:13:53 浏览: 38
`make_shared` 和 `new` 都可以用来动态地分配内存空间,但它们有一些不同的特点。
`make_shared` 是 C++11 中引入的智能指针的一个工厂函数,它可以一次性完成内存申请和对象构造。它的语法如下:
```c++
std::shared_ptr<T> ptr = std::make_shared<T>(args...);
```
其中,`T` 是要分配的对象类型,`args...` 是参数列表,用来调用 `T` 的构造函数。`make_shared` 返回一个 `shared_ptr` 智能指针对象,它可以自动管理内存释放,避免了手动调用 `delete` 导致内存泄漏和二次释放的问题。此外,`make_shared` 有一个优势,就是它可以减少动态分配内存和对象构造的开销,因为它在一次分配内存中同时完成了内存和对象的构造。因此,对于需要频繁分配和释放的对象,`make_shared` 是更好的选择。
`new` 是 C++ 中动态分配内存的原始方式,它的语法如下:
```c++
T* ptr = new T(args...);
```
其中,`T` 是要分配的对象类型,`args...` 是参数列表,用来调用 `T` 的构造函数。`new` 返回一个指向 `T` 的指针,需要手动管理内存释放,即使用 `delete` 来释放动态分配的内存。但是,使用 `new` 和 `delete` 容易导致内存泄漏和二次释放的问题,因此在实际开发中,应当尽量避免使用 `new` 和 `delete`,而使用智能指针等更加安全和方便的方式来管理动态分配的内存。