c++ unique_ptr怎么使用_c++独占智能指针用法说明

std::unique_ptr是c++中独占式智能指针,通过移动语义转移所有权,不可复制,离开作用域自动释放内存,推荐使用std::make_unique创建,支持动态数组管理,有效防止内存泄漏。

c++ unique_ptr怎么使用_c++独占智能指针用法说明

在C++中,std::unique_ptr 是一种独占式智能指针,用于自动管理动态分配的对象生命周期。它确保同一时间只有一个 unique_ptr 拥有该对象,当指针离开作用域时,所指向的对象会自动被删除,防止内存泄漏。

基本用法

创建一个 unique_ptr 通常使用 std::make_unique(C++14起支持),这是最安全、推荐的方式:

 #include <memory> #include <iostream> <p>int main() { auto ptr = std::make_unique<int>(42); std::cout << *ptr << "n"; // 输出: 42</p><pre class='brush:php;toolbar:false;'>return 0;

} // ptr 离开作用域,自动释放内存

如果无法使用 C++14,可以用 std::unique_ptr<T>(new T) 构造,但不推荐直接写 new,容易引发异常安全问题。

立即学习C++免费学习笔记(深入)”;

不能复制,可以移动

unique_ptr 不允许复制构造或赋值,因为它是“独占”的:

 auto ptr1 = std::make_unique<int>(10); // auto ptr2 = ptr1;        // 错误:不能复制 auto ptr2 = std::move(ptr1); // 正确:转移所有权 

执行 std::move 后,ptr1 变为 nullptr,不再拥有对象,ptr2 成为唯一所有者。

c++ unique_ptr怎么使用_c++独占智能指针用法说明

Gnomic智能体平台

国内首家无需魔法免费无限制使用的ChatGPT4.0,网站内设置了大量智能体供大家免费使用,还有五款语言大模型供大家免费使用~

c++ unique_ptr怎么使用_c++独占智能指针用法说明47

查看详情 c++ unique_ptr怎么使用_c++独占智能指针用法说明

作为函数参数和返回值

unique_ptr 传入函数时,建议使用移动语义或引用:

 void process(std::unique_ptr<int> ptr) {     std::cout << "Value: " << *ptr << "n"; } <p>auto createPtr() { return std::make_unique<int>(100); }</p><p>// 使用示例: auto p = createPtr();           // 接收返回的 unique_ptr process(std::move(p));          // 转移所有权给函数</p>

如果函数只需读取而不获取所有权,应使用指针或引用接收:void view(int* p)void view(const int&amp; p)

数组支持

对于动态数组,unique_ptr 也支持,但需指定数组类型:

 auto arr = std::make_unique<int[]>(10); // 创建长度为10的数组 arr[0] = 5; // arr[1] = ... 可正常访问 

注意:make_unique 对数组只能初始化为未定义值,不能像普通对象那样传递初始值。

基本上就这些。合理使用 unique_ptr 能有效避免手动管理内存带来的风险,提升代码安全性和可维护性。关键点是理解“独占”语义和移动机制。不复杂但容易忽略。

上一篇
下一篇
text=ZqhQzanResources