此时使用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>...
// 默认构造,不指向任何对象的std::unique_ptr<int>ptr;// 直接构造1std::unique_ptr<int>ptr(newint(42));// 直接构造2,推荐。使用std::make_uniqueautoptr=std::make_unique<int>(42);// 如果指向的对象需要特殊的删除器,则这样定义和使用voidcustomDeleter(int*p){/* 自定义释放逻辑 */}std::uni...
自动释放资源:std::unique_ptr使用RAII(资源获取即初始化)原则,确保在不再需要时自动释放所管理的对象,避免内存泄漏。 独占所有权:std::unique_ptr是独占所有权的智能指针,确保同一时间只有一个std::unique_ptr可以管理某个对象,避免资源的多重释放或访问冲突。 高效性能:std::unique_ptr采用轻量级实现,...
代码简洁性:使用std::unique_ptr可以简化代码,减少手动内存管理的代码量,提高代码的可读性和可维护性。 使用std::unique_ptr创建对象数组的应用场景包括但不限于: 图形学和游戏开发:在图形学和游戏开发中,经常需要管理大量的对象,使用std::unique_ptr可以方便地管理对象数组的内存,提高代码的性能和可维护性。
std::unique_ptr使用 1 引言 std::unique_ptr是c++11起引入的智能指针,为什么必须要在c++11起才有该特性,主要还是c++11增加了move语义,否则无法对对象的所有权进行传递。 2 示例代码 #include<memory>#include<iostream>#include<utility>classFoo{public:Foo()=default;Foo(inta):_a(a){}~Foo(){}intget_...
std::unique_ptr release的使用 在c++中,动态内存管理是通过new/delete 运算符来进行的。由于确保在正确的时间释放内存是很困难的,为了避免内存泄漏,更加容易,安全地使用动态内存,C++11标准库提供了两种智能指针类型来管理动态对象。只能指针的行为类似于常规指针,重要的区别是它负责自动释放所指的对象。
std::unique_ptr有两种形式. 一种用于单个对象, 如std::unique_ptr<T>, 另一种用于数组, 如std::unique_ptr<T[]>. 然而, 鉴于我们有像std::vector、std::array这样好的容器类, 我们应该很少以其数组形式使用std::unique_ptr. 此外, 虽然std::unique_ptr表达了对象的独占所有权, 但它可以很容易地转换...
构造unique_ptr 的时候第二个参数是一个自定义删除器,如果不填写自定义删除器,就会使用默认的删除器,一般情况下我们用默认的删除器就可以了,如果有需要也可以写自定义的删除器。注意 C++11 中构造 std::unique_ptr 不能像 std::shared_ptr 那样(通过 make...
在接下来的章节中,我们会深入解析 C++ 的智能指针类型,包括std::unique_ptr、std::shared_ptr和std::weak_ptr,并介绍它们在不同场景中的应用,以及如何使用它们进行更高效的内存管理。 1.2 智能指针的类型 在C++中,有几种类型的智能指针,包括std::unique_ptr、std::shared_ptr和std::weak_ptr。以下是这三种智...