std::unique_ptr 是C++11 引入的一种智能指针,用于管理动态分配对象的生命周期。它确保对象在不再需要时自动释放内存,从而避免内存泄漏。std::unique_ptr 的主要特点是独占所有权,即每个 std::unique_ptr 对象都独占地拥有一个指向动态分配对象的指针,不能复制但可以通过移动语义转移所有权。 2. std::unique_ptr...
当ptr超出作用域时,std::unique_ptr会自动释放动态分配的内存。 传递std::unique_ptr的所有权 std::unique_ptr的独占所有权意味着它不能被复制,但我们可以通过移动语义将所有权转移给另一个std::unique_ptr。 #include<iostream> #include<memory> voidprocess%28std::unique_ptr<int>p%29{ std::cout<<"Pro...
std::unique_ptr是一种独占所有权的智能指针。顾名思义,一个动态对象最多只能被一个std::unique_ptr管理,不能有多个指针共享它的所有权。 当std::unique_ptr离开作用域时,它会自动释放管理的内存,这使得它非常适合独享的资源管理。 2. 基本用法 我们先看看std::unique_ptr的基本用法: #include <iostream>#in...
此时使用std::unique_ptr来管理动态内存,只要std::unique_ptr指针创建成功,其析构函数都会被调用,确保动态资源被释放。 #include<memory>#include<iostream>usingnamespacestd;classFunc{};intmain(){unique_ptr<Func>upFunc(newFunc);//...return0; } 容器内保存指针示例: std::vector<std::unique_ptr<int>...
reset():释放当前所拥有的对象(如果存在),可选地接受一个新的裸指针来接管。 get():返回指向对象的原始指针,但不改变所有权。 operator->() 和 operator*():提供对托管对象的直接访问。 案例 #include <memory> // 1.创建一个指向整型对象的unique_ptr,默认使用delete运算符释放资源 ...
在类的公共接口中返回std::unique_ptr来转移所有权。 在需要共享但不参与所有权的场景中使用std::weak_ptr。 std::unique_ptr和std::shared_ptr是C++中管理动态内存的强大工具。正确使用这些智能指针可以大大减少内存泄漏的风险,提高代码的安全性和可维护性。理解它们的特性和适用场景对于编写高质量的C++程序至关重...
虽然这本身并不是一个可怕的有用的例子,但它会有一些细微的变化。
unique_ptr的核心是__uniq_ptr_impl类,它实现了raw pointer的所有操作,包括获取raw pointer、接受用户自定义deleter。std::make_unique的源码直观展示了如何通过new操作内存分配,然后将新分配的内存传递给unique_ptr的构造函数,整个过程简洁明了。通过实例,我们可以看到unique_ptr在内存分配和释放上的...