一、使用make系列函数创建智能指针可以减少冗余代码 auto upw1(std::make_unique<Widget>()); // with make func std::unique_ptr<Widget> upw2(new Widget); // without make func auto spw1(std::make_shared<Widget>()); // with make func std::shared_ptr<Widget> spw2(new Widget); // with...
std::unique_ptr 是一个模板类,它提供了对动态分配对象的独占所有权(即没有其他智能指针可以同时拥有同一个对象的所有权)。当 std::unique_ptr 被销毁时,它所指向的对象也会被自动删除。 std::make_unique 的典型用法如下所示: auto my_unique_ptr = std::make_unique<MyClass>(constructor_arguments...)...
unique_ptr对象始终是关联的原始指针的唯一所有者。我们无法复制unique_ptr对象,它只能移动。 由于每个unique_ptr对象都是原始指针的唯一所有者,因此在其析构函数中它直接删除关联的指针,不需要任何参考计数。 创建一个空的 unique_ptr 对象 创建一个空的unique_ptr对象,因为没有与之关联的原始指针,所以它是空的。
#include<memory>std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(42); std::shared_ptr<int> sharedPtr2 = sharedPtr1;// 共享所有权 选择unique_ptr还是shared_ptr取决于你的需求。如果能确保对象只有一个所有者,使用unique_ptr可以更轻量和高效。如果需要多个地方共享对象所有权,使用shared_ptr。
shared_ptr<int> sp2 = sp1;// 复制,sp2也指向p shared_ptr<int> sp3 = make_shared<int>(2);// 通过make_shared构造,make_shared内部调用了new int(2); sp3.reset(new int(3));// 通过reset重置内部数据指针 sp3.reset();// 通过reset重置内部数据指针为空 ...
模拟实现简易unique_ptr例程原理:封掉拷贝构造和赋值重载namespace test { template<class T> class unique_ptr { public: unique_ptr(T* ptr) :_ptr(ptr) {} ~unique_ptr() { delete _ptr; std::cout << "delete ptr" << "\n"; } T& operator*() { return *_ptr; } T* operator->() {...
"<<std::endl;std::unique_ptr<AA>p0(newAA("西施0"));// 方法一: 分配内存并初始化std::unique_ptr<AA>p1=std::make_unique<AA>("冰冰1");// 方法二: C++14标准。std::cout<<"智能指针调用p1->m_name: "<<p1->m_name<<std::endl;// 2)用nullptr给unique_ptr赋值将释放对象,空的...
unique_ptr unique_ptr 是独享的智能指针,一个对象只允许被一个 unique_ptr 指向。 正确✅ unique_ptr<User>user(newUser("unique_ptr")); 正确✅:推荐使用 make_unique unique_ptr<User>user=make_unique<User>("unique_ptr"); 错误❌:一个对象只允许被一个 unique_ptr 指向。
使用make_shared来创建shared_ptr,以减少潜在的内存分配次数和提高效率。 代码示例 unique_ptr示例 代码语言:cpp 代码运行次数:0 复制 Cloud Studio代码运行 #include<memory>voidmanageResource(std::unique_ptr<int>ptr){// 使用资源}// ptr在此处自动销毁,资源被释放intmain(){autoptr=std::make_unique<int>...
unique_ptr 类型智能指针在设计上最显著的特点是内部托管的指针一旦被创建就不能被任何形式的复制给另一...