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...
// 资源管理 - 反例:多个unique_ptr指向同一资源 int* rawPtr = new int(42); std::unique_ptr<int> ptr1(rawPtr); std::unique_ptr<int> ptr2(rawPtr); // 错误:两个unique_ptr指向同一资源 // 解释:这是错误的,因为每个std::unique_ptr认为自己是资源的唯一所有者,当它们销毁时,资源会被多次删...
std::unique_ptr<int>ptr(newint(10));int*raw_ptr=ptr.release();// 释放所有权,返回原始指针deleteraw_ptr;// 手动删除对象以避免内存泄漏 重置和重新分配 可以使用reset方法重置std::unique_ptr,释放当前对象并管理新的对象: std::unique_ptr<int>ptr(newint(10));ptr.reset(newint(20));// 重置并...
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<int>sp(newint(12345)); 方法二: std::unique_ptr<int> sp; sp.reset(newint(12345)); 方法三: std::unique_ptr<int> sp = std::make_unique<int>(12345); 以上三种方式均可,其中,方法三是C++14新增的,通过std::make_unique方法来创建std::unique_ptr对象。
// 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::unique_ptr<int>sp(newint(12345)); 1. 方法二: std::unique_ptr<int>sp; sp.reset(newint(12345)); 1. 2. 方法三: std::unique_ptr<int>sp=std::make_unique<int>(12345); 1. 以上三种方式均可,其中,方法三是C++14新增的,通过std::make_unique方法来创建std::unique_ptr对象。
方法一: 代码语言:javascript 复制 std::unique_ptr<int>sp(newint(12345)); 方法二: 代码语言:javascript 复制 std::unique_ptr<int>sp;sp.reset(newint(12345)); 方法三: 代码语言:javascript 复制 std::unique_ptr<int>sp=std::make_unique<int>(12345); ...
为std::unique_ptr传递类的静态方法作为删除器可以通过使用lambda表达式来实现。lambda表达式是一种匿名函数,可以捕获外部变量,并且可以作为函数对象传递给std::unique_ptr的删除器参数。 下面是一个示例代码,演示了如何为std::unique_ptr传递类的静态方法作为删除器: ...