使用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.转移所...
当ptr超出作用域时,std::unique_ptr会自动释放动态分配的内存。 传递std::unique_ptr的所有权 std::unique_ptr的独占所有权意味着它不能被复制,但我们可以通过移动语义将所有权转移给另一个std::unique_ptr。 #include<iostream> #include<memory> voidprocess%28std::unique_ptr<int>p%29{ std::cout<<"Pro...
特点:std::unique_ptr是一种独占式智能指针,它保证同一时间只有一个指针拥有对对象的所有权。当std::unique_ptr被销毁时,它所指向的对象也会被自动删除。 适用场景: 用于管理资源的独占访问。 实现资源所有权的转移,例如从函数返回动态分配的对象。 用于实现 RAII (Resource Acquisition Is Initialization) 模式,确保...
std::unique_ptr std::unique_ptr 是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于 std::shared_ptr 允许多个 shared_ptr 引用同一个裸指针,它没有引用计数,它的性能比 shared_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适用场景广泛,确保在对象生命周期内只存在一个指针...