使用std::make_unique和std::make_shared来创建智能指针。 避免使用裸指针,尽可能使用智能指针。 注意避免std::shared_ptr的循环引用问题,必要时使用std::weak_ptr。 在类的公共接口中返回std::unique_ptr来转移所有权。 在需要共享但不参与所有权的场景中使用std::weak_ptr。 std::unique_ptr和std::shared_pt...
推荐使用 std::make_unique 创建std::unique_ptr,它简化了代码并避免了潜在的异常安全问题。 #include <memory> #include <iostream> void example() { // 使用 std::make_unique 创建 unique_ptr auto ptr = std::make_unique<int>(40); std::cout << *ptr << std::endl; // 输出: 40 } 总结...
// 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>(); // 3.转移所...
用于实现 observer 模式,观察者使用std::shared_ptr来共享对被观察对象的访问。 示例代码: #include<iostream>#include<memory>voidprocessResource(std::shared_ptr<int>ptr){std::cout<<"Processing resource: "<<*ptr<<std::endl;}intmain(){std::unique_ptr<int>uptr(newint(10));// 独占资源// std:...
std::unique_ptr std::unique_ptr 是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于 std::shared_ptr 允许多个 shared_ptr 引用同一个裸指针,它没有引用计数,它的性能比 shared_ptr 会...
// 资源管理 - 反例:多个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::auto_ptr一样,std::unique_ptr也是一种智能指针,它也是通过指针的方式来管理对象资源,并且在 unique_ptr 的生命期结束后释放该资源。 unique_ptr 持有对对象的独有权 —— 两个 unique_ptr 不能指向一个对象,...
unique_ptr 是模板类, 默认的删除器需要通过 sizeof 获取泛型数据类型的字节大小. 为了减少麻烦, 如果有比较多的习惯使用 unique_ptr, 那么就减少前置声明的使用 当然有的同学会说, 可以通过自定义删除器绕开一些问题, 但大多数工程使用自定义删除器是很少的个例, 不必要为了个例而且否定一个对于大多数场景是有利...
std::unique_ptr不支持复制,但支持移动,可通过移动语义转移所有权。例如:可以返回std::unique_ptr以传递所有权,利用返回值优化(RVO)或移动语义确保安全。同样,将std::unique_ptr作为右值引用参数传递给函数,转移所有权也是安全的。std::unique_ptr适用场景广泛,确保在对象生命周期内只存在一个指针...