通过实际代码示例,展示了std::unique_ptr、std::make_unique和std::make_shared的创建机制,以及它们如何提高代码的安全性和健壮性 2.0 使用介绍std::make_unique std::make_unique 是 C++11 标准库中的一个实用函数,它是 C++14 标准中引入的,用于创建一个 std::unique_ptr 智能指针,并将其指向一个新分配...
优先使用std::unique_ptr,除非确实需要共享所有权。 使用std::make_unique和std::make_shared来创建智能指针。 避免使用裸指针,尽可能使用智能指针。 注意避免std::shared_ptr的循环引用问题,必要时使用std::weak_ptr。 在类的公共接口中返回std::unique_ptr来转移所有权。 在需要共享但不参与所有权的场景中使用s...
shared_ptr与weak_ptr示例 代码语言:cpp 复制 #include<memory>classNode{public:std::shared_ptr<Node>next;std::weak_ptr<Node>prev;// ...其他成员和方法};voidcreateChain(){autonode1=std::make_shared<Node>();autonode2=std::make_shared<Node>();node1->next=node2;node2->prev=node1;// 使...
std::shared_ptr<int> sp1(new int(10)); //需要两次申请内存,new int + new RefCnt auto bar = std::make_shared<int>(10); auto foo = std::make_shared<std::array<char,64>>(); return 0; }本文来自博客园,作者:HJfjfK,原文链接:https://www.cnblogs.com/DSCL-ing/p/18253156合集...
下图是shared_ptr指针p没有初始化的情况。 一个没有初始化的shared_ptr 执行完如下语句: auto p = std::make_shared<int>(4); 后,其内容变为,下图: shared_ptr完成指向后 其内部计数器为1,如下图为调试结果: 一个share_ptr初始化完成后的引用计数 ...
C++11中的智能指针分为共享型的shared_ptr和独占型的unique_ptr,C++11提供了make_shared函数来创建shared_ptr指针,使用起来更方便,有了make_shared函数,就可以完全摆脱new操作了,可以写出完全没有new/delete的程序。 但是unique_ptr却不同,unique_ptr不像shared_ptr可以通过make_shared方法来创建智能指针,C++11目前还...
unique_ptr<User>user=make_unique<User>("unique_ptr"); 错误❌:一个对象只允许被一个 unique_ptr 指向。 User*u=newUser("shared_ptr");unique_ptr<User>user1(u);unique_ptr<User>user2(u); 错误❌:unique_ptr 不支持拷贝 User*u=newUser("shared_ptr");unique_ptr<User>user1(u);unique_...
:make_unique的小demo,定义一个MyClass类,然后在main函数中使用std::make_unique创建一个该类的对象。最后,我们将介绍std::unique_ptr的内部原理,包括所有权转移过程和析构机制。我们还将讨论std::shared_ptr和std::weak_ptr的相关知识点,包括它们的共享所有权和观察机制。
std::unique_ptr 是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于 std::shared_ptr 允许多个 shared_ptr 引用同一个裸指针,它没有引用计数,它的性能比 shared_ptr 会高一点。
使用make_shared来创建shared_ptr,以减少潜在的内存分配次数和提高效率。 代码示例 unique_ptr示例 #include <memory> void manageResource(std::unique_ptr<int> ptr) { // 使用资源 } // ptr在此处自动销毁,资源被释放 int main() { auto ptr = std::make_unique<int>(42); // 创建并初始化unique_pt...