std::unique_ptr 不支持复制,但支持移动,这样可以转移所有权。 #include <memory> #include <iostream> void example() { std::unique_ptr<int> ptr1(new int(20)); // 移动 ptr1 到 ptr2,ptr1 现在为空 std::unique_ptr<int> ptr2 = std::move(ptr1); if (ptr1) { std::cout << *ptr1...
std::unique_ptr 是一个模板类,它提供了对动态分配对象的独占所有权(即没有其他智能指针可以同时拥有同一个对象的所有权)。当 std::unique_ptr 被销毁时,它所指向的对象也会被自动删除。 std::make_unique 的典型用法如下所示: auto my_unique_ptr = std::make_unique<MyClass>(constructor_arguments...)...
以下是一个完整的示例,展示了std::unique_ptr的基本用法: #include<iostream>#include<memory>voiduse_unique_ptr(){// 使用 std::make_unique 创建 std::unique_ptrautoptr1=std::make_unique<int>(10);std::cout<<"Value: "<<*ptr1<<std::endl;// 转移所有权std::unique_ptr<int>ptr2=std::mov...
std::unique_ptr std::unique_ptr是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于std::shared_ptr允许多个shared_ptr引用同一个裸指针,它没有引用计数,它的性能比shared_ptr会高一点。 在用法上std::unique_ptr和std::shared_ptr是类似的,主要的不同是std::unique_ptr之间的赋值需要通过std::move...
自动释放: 当unique_ptr离开作用域时,它所管理的对象会被自动删除。 零开销: 在大多数操作中,unique_ptr与原始指针的性能相当。 自定义删除器: 可以指定自定义的删除方式。 示例代码 #include<iostream> #include<memory> classMyClass{ public: MyClass() { std::cout <<"MyClass constructed\n"; } ...
// 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使用 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_...
unique_ptr<T>的构造函数接受指向T类型的对象的原始指针(因此,它接受T*)。
std::make_unique是C++14引入的函数模板,用于创建std::unique_ptr,提供异常安全,是推荐的创建方式。使用std::make_unique比直接使用构造函数更为简洁。例如:以下是使用构造函数创建std::unique_ptr的示例:原先使用普通指针时,分配内存后需手动释放,以防内存泄漏。但使用std::unique_ptr时,超出范围...