C++智能指针unique_ptr的使用
时间: 2023-12-27 12:03:54 浏览: 113
unique_ptr 是 C++11 新增的智能指针,用于管理动态分配的对象。它的主要特点是独占式拥有权,即同一时间只能有一个 unique_ptr 指向某个对象。
使用 unique_ptr 的步骤如下:
1. 包含头文件 `#include <memory>`。
2. 创建 unique_ptr 对象并初始化它,可以使用 `std::make_unique` 函数来创建指定类型的对象。
例如:`std::unique_ptr<int> ptr = std::make_unique<int>(42);`
3. 可以使用箭头运算符 `->` 或者星号运算符 `*` 来访问 unique_ptr 指向的对象。
例如:`int value = *ptr;`
4. unique_ptr 会在其作用域结束时自动释放所管理的对象,不需要显式调用 delete。
例如:`ptr.reset();` 或者 `ptr = nullptr;`
unique_ptr 还支持移动语义,可以将所有权转移给另一个 unique_ptr。
例如:
```cpp
std::unique_ptr<int> ptr1 = std::make_unique<int>(42);
std::unique_ptr<int> ptr2 = std::move(ptr1);
```
需要注意的是,不要使用多个 unique_ptr 指针指向同一个对象,否则会导致释放重复或者野指针的问题。如果需要共享所有权,可以考虑使用 shared_ptr。
希望以上信息对您有所帮助!如有其他问题,请随时提问。
相关问题
c++ 智能指针 unique_ptr
unique_ptr 是 C++ 中的智能指针,用于管理动态分配的对象。它的特点是独占资源,即同一时间只能有一个 unique_ptr 指向同一个对象,确保了资源的独占性和自动释放。当 unique_ptr 被销毁或者重置时,它所管理的对象也会被自动释放。
unique_ptr 的使用相对简单,可以通过以下方式创建一个 unique_ptr 对象:
```
std::unique_ptr<DataType> ptr = std::make_unique<DataType>(args);
```
其中,DataType 是指向的对象类型,args 是用于构造 DataType 对象的参数。
unique_ptr 还提供了一些常用的操作方法,比如访问指针所指的对象可以使用 `*` 或者 `->` 运算符,重置指针可以使用 `reset` 方法,获取指针可以使用 `get` 方法等等。此外,unique_ptr 还支持移动语义,可以通过 `std::move` 将 unique_ptr 转移给其他 unique_ptr。
需要注意的是,unique_ptr 不支持复制语义,即不能直接进行复制操作。如果需要共享资源,可以考虑使用 shared_ptr。
c++ 智能指针 unique_ptr实现
unique_ptr 是 C++11 中引入的智能指针,用于管理动态分配的对象。
unique_ptr 的特性是:它是唯一拥有(unique ownership)被管理对象的智能指针,也就是说,同一时间只能有一个 unique_ptr 指向一个对象。当 unique_ptr 被销毁时,它会自动释放所管理的对象内存。
下面是 unique_ptr 的简单实现:
```cpp
template <typename T>
class unique_ptr {
public:
unique_ptr(T* ptr = nullptr) : m_ptr(ptr) {}
~unique_ptr() { delete m_ptr; }
unique_ptr(const unique_ptr&) = delete;
unique_ptr& operator=(const unique_ptr&) = delete;
unique_ptr(unique_ptr&& other) noexcept : m_ptr(other.m_ptr) {
other.m_ptr = nullptr;
}
unique_ptr& operator=(unique_ptr&& other) noexcept {
if (this != &other) {
delete m_ptr;
m_ptr = other.m_ptr;
other.m_ptr = nullptr;
}
return *this;
}
T* get() const { return m_ptr; }
T* operator->() const { return m_ptr; }
T& operator*() const { return *m_ptr; }
private:
T* m_ptr;
};
```
这是一个简化版本的 unique_ptr,它包含了基本的功能,如构造函数、析构函数、移动构造函数、移动赋值运算符,以及 get()、operator->() 和 operator*() 方法。
需要注意的是,这个实现并不完整,只是为了演示 unique_ptr 的基本原理和用法。实际使用时,应该考虑更多的细节,如空指针检查、自定义删除器等。另外,C++11 中已经提供了标准库中的 unique_ptr 实现,我们通常会使用标准库中的智能指针而不是自己实现。
阅读全文