C++std::unique_ptr是什么
时间: 2024-01-22 12:01:48 浏览: 102
C++标准库中的`std::unique_ptr`是一种智能指针,它提供了一种自动管理动态分配内存的方法。`unique_ptr`是一个独占式智能指针,意味着它所指向的对象只能有一个`unique_ptr`实例拥有,当这个实例被销毁时,它所指向的对象也会被销毁。`unique_ptr`的主要作用是防止内存泄漏和空悬指针,同时也提高了代码的可读性和安全性。
相关问题
C++学习之-std::make_unique 与std::unique_ptr
std::make_unique 是 C++14 中引入的一个函数模板,用于创建一个指向动态分配对象的 std::unique_ptr。它的语法如下:
```cpp
template< class T, class... Args >
std::unique_ptr<T> make_unique( Args&&... args );
```
std::make_unique 比直接使用 new 更安全,因为它可以避免发生内存泄漏,即使在构造函数抛出异常的情况下。
下面是一个使用 std::make_unique 的示例:
```cpp
auto ptr = std::make_unique<int>(42);
```
这将创建一个指向 int 类型的 std::unique_ptr,并将其初始化为值 42。
在回答你其他的问题之前,请告诉我你想了解的具体内容,以便我能够更好地回答你。谢谢!
c++11 std::unique_ptr<>
`std::unique_ptr<>`是C++11引入的一个智能指针模板,用于管理动态分配的对象所有权。它是一种独占所有权的表示,意味着一个`unique_ptr`总是指向某个特定的对象,并且当`unique_ptr`离开其作用域时,它所管理的对象会被自动删除,释放内存,避免了内存泄漏的问题。
`unique_ptr`有以下几个特点:
1. **单一线程安全**:`unique_ptr`内部实现了RAII(Resource Acquisition Is Initialization)原则,确保对象在生命周期结束时被正确销毁。
2. **无复制**:`unique_ptr`不允许复制,如果需要传递一个`unique_ptr`,通常通过移动(move)操作来完成。
3. **无赋值**:同样,`unique_ptr`也不允许赋值操作,目的是防止资源泄露。你可以将一个`unique_ptr`的剩余所有权转移给另一个`unique_ptr`,这被称为“交换”(swap)。
4. **默认构造函数**:如果你不提供初始化参数,`unique_ptr`会构造一个空的,管理的对象为`nullptr`。
以下是`unique_ptr`的基本用法示例:
```cpp
#include <memory>
class MyClass {
public:
// ...
};
int main() {
std::unique_ptr<MyClass> ptr(new MyClass());
// 使用ptr...
// 当这里离开作用域时,MyClass对象会被析构并删除
}
```
阅读全文