// 默认构造,不指向任何对象的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是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于std::shared_ptr允许多个shared_ptr引用同一个裸指针,它没有引用计数,它的性能比shared_ptr会高一点。 在用法上std::unique_ptr和std::shared_ptr是类似的,主要的不同是std::unique_ptr之间的赋值需要通过std::move实现。 在code2 ...
使用std::unique_ptr的步骤如下: 在派生类中声明一个std::unique_ptr成员变量,用于管理基类的资源。 在派生类的构造函数中,使用std::make_unique函数创建一个std::unique_ptr对象,并将基类的指针传递给它。 在派生类的析构函数中,不需要手动释放资源,std::unique_ptr会自动释放。
std::cout <<"使用计数: "<< ptr1.use_count() << std::endl;// 输出 3 // ptr2和ptr3离开作用域,但对象不会被删除 } std::cout <<"使用计数: "<< ptr1.use_count() << std::endl;// 输出 1 // ptr1离开作用域,对象被删除 } 比较unique_ptr 和 shared_ptr 最佳实践 优先使用std::u...
// 1.创建一个指向整型对象的unique_ptr,默认使用delete运算符释放资源 std::unique_ptr<int> uptr(new int(10)); // 2.C++ 14 使用 std::make_unique std::unique_ptr<int> uptr = std::make_unique<int>(10); std::unique_ptr<MyClass> uptr = std::make_unique<MyClass>(); ...
和std::auto_ptr一样,std::unique_ptr也是一种智能指针,它也是通过指针的方式来管理对象资源,并且在 unique_ptr 的生命期结束后释放该资源。 unique_ptr 持有对对象的独有权 —— 两个 unique_ptr 不能指向一个对象,...
std::unique_ptr和std::shared_ptr可以通过以下方式使用:
std::make_unique 是 C++11 标准库中的一个实用函数,它是 C++14 标准中引入的,用于创建一个 std::unique_ptr 智能指针,并将其指向一个新分配的对象。使用 std::make_unique 比直接使用 new 表达式更为安全,因为它可以防止资源泄漏,并提供异常安全保证。 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_...