尽量使用std::make_unique和std::make_shared而不直接使用new
时间: 2023-11-16 13:56:27 浏览: 111
使用std::make_unique和std::make_shared而不直接使用new是一种现代C++的最佳实践。这两个函数模板可以帮助我们创建智能指针,从而更安全地管理内存资源。
std::make_unique用于创建std::unique_ptr,它是一种独占所有权的智能指针。使用make_unique可以避免显式调用delete来释放内存,因为unique_ptr会在其生命周期结束时自动释放所管理的对象。
示例代码如下所示:
```cpp
auto uniquePtr = std::make_unique<int>(42); // 创建一个unique_ptr并初始化为42
```
std::make_shared用于创建std::shared_ptr,它是一种共享所有权的智能指针。shared_ptr使用引用计数来跟踪对象的所有者数量,并在最后一个所有者释放资源时自动释放内存。
示例代码如下所示:
```cpp
auto sharedPtr = std::make_shared<int>(42); // 创建一个shared_ptr并初始化为42
```
使用make_unique和make_shared有以下优点:
1. 更安全:它们避免了手动内存管理和潜在的内存泄漏或悬空指针问题。
2. 更简洁:它们提供了更简洁的语法,不需要显式指定删除器或类型。
3. 更高效:它们可以在一次内存分配中同时分配对象和控制块,减少额外的开销。
因此,在现代C++中,推荐使用std::make_unique和std::make_shared来创建智能指针,以提高代码的安全性、可读性和性能。
阅读全文