unique_ptr<T[]> 有哪些操作?
时间: 2024-05-28 19:08:44 浏览: 5
unique_ptr<T[]> 是一个指向 T 类型数组的智能指针,它可以通过以下操作来管理动态分配的内存:
1. 构造函数:unique_ptr<T[]> 可以使用默认构造函数、指定指针的构造函数、传入 deleter 的构造函数、传入自定义删除器的构造函数等多种方式进行构造。
2. 赋值操作:可以用 unique_ptr<T[]> 对象给另一个 unique_ptr<T[]> 对象赋值,也可以用 nullptr 或者已存在的指针来赋值。
3. 解引用操作:unique_ptr<T[]> 支持解引用操作,可以通过 * 和 [] 运算符访问数组元素。
4. 释放内存: unique_ptr<T[]> 会自动管理内存,当它被销毁时,它所指向的数组内存会被自动释放。
5. 移动和交换:unique_ptr<T[]> 支持移动语义和 swap() 函数,可以在不复制内存的情况下将指针所有权转移或交换。
6. 获取指针:可以使用 get() 函数获取智能指针所指向的数组的原始指针。
7. 重置指针:可以使用 reset() 函数将智能指针指向另一个数组或者置为 nullptr。
8. 检查指针是否为空:可以使用 operator bool() 函数或者 ! 操作符检查智能指针是否为空。
9. 获取数组大小:可以使用 size() 函数获取数组的大小。
相关问题
std::shared_ptr<T> 列表
std::shared_ptr<T>是C++11中引入的智能指针之一。它是一个模板类,用于管理动态分配的对象。多个std::shared_ptr可以同时拥有同一个对象的所有权,它们会共享该对象的引用计数。当最后一个std::shared_ptr被销毁时,它会自动释放所管理的对象。
以下是std::shared_ptr<T>的一些常见用法:
1. 创建一个新的std::shared_ptr并指向动态分配的对象:
std::shared_ptr<T> ptr(new T);
2. 使用std::make_shared<T>函数创建一个新的std::shared_ptr并指向动态分配的对象:
std::shared_ptr<T> ptr = std::make_shared<T>();
3. 使用std::shared_ptr的拷贝构造函数创建一个新的std::shared_ptr并共享同一个对象:
std::shared_ptr<T> ptr1(new T);
std::shared_ptr<T> ptr2 = ptr1;
4. 使用std::shared_ptr的赋值操作符将一个std::shared_ptr指向另一个std::shared_ptr所管理的对象:
std::shared_ptr<T> ptr1(new T);
std::shared_ptr<T> ptr2(new T);
ptr1 = ptr2;
需要注意的是,std::shared_ptr使用引用计数来跟踪对象的所有权,因此当最后一个std::shared_ptr被销毁时,它会自动释放所管理的对象。引用计数的加一和减一操作是原子性的,这意味着在多线程环境下,std::shared_ptr的使用是线程安全的。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [c++11新特性之智能指针std::shared_ptr、std::weak_ptr、std::unique_ptr的使用](https://blog.csdn.net/Jason_Chen__/article/details/124302757)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [C++11 std::shared_ptr总结与使用示例代码详解](https://download.csdn.net/download/weixin_38677725/14841436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
template <class T> T& shared_ptr<T>::operator * () const { return *m_pObject; }
这是一个模板类的成员函数,具体是智能指针类的 `operator *` 重载函数,返回指向被管理对象的引用。
智能指针是一种可以自动管理动态内存的指针,它使用 RAII 技术来实现自动内存管理。在 C++11 标准中,标准库提供了两种智能指针:`std::unique_ptr` 和 `std::shared_ptr`。
在这个模板类中,`shared_ptr` 是一个引用计数智能指针,即多个 `shared_ptr` 可以指向同一个对象,对象的引用计数会随之增加。当最后一个 `shared_ptr` 被销毁时,对象的引用计数会减少,当引用计数为 0 时,对象会被自动销毁。
在这个重载函数中,返回指向被管理对象的引用,这样可以通过智能指针类的对象来操作被管理对象,而不需要手动释放资源,更加方便和安全。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)