std::unique_ptr的独占所有权意味着它不能被复制,但我们可以通过移动语义将所有权转移给另一个std::unique_ptr。 #include<iostream> #include<memory> voidprocess%28std::unique_ptr<int>p%29{ std::cout<<"Processingvalue:"<<%2Ap<<std::endl; } intmain%28%29{ std::unique_ptr<int>ptr=std::m...
优先使用std::unique_ptr,除非确实需要共享所有权。 使用std::make_unique和std::make_shared来创建智能指针。 避免使用裸指针,尽可能使用智能指针。 注意避免std::shared_ptr的循环引用问题,必要时使用std::weak_ptr。 在类的公共接口中返回std::unique_ptr来转移所有权。 在需要共享但不参与所有权的场景中使用s...
#include <iostream>#include <memory> int main%28%29 { std::unique_ptr<int> ptr1 = std::make_unique<int>%2842%29; // 创建智能指针 std::cout << "ptr1 指向的值: " << %2Aptr1 << std::endl; // 转移所有权 std::unique_ptr<int> ptr2 = std::move%28ptr1%29; if %28%21pt...
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.转移所有权 int* raw_ptr = new int(10); std::unique_ptr<int> uptr(r...
shared_ptr作为另一个常用的智能指针,它和unique_ptr智能指针的理念有着很大的不同,它提供了对资源共享管理,即对资源所有权的共享(shared ownership),这就要求shared_ptr必须是一个可复制的对象。但是由于shared_ptr对象有很多个,而具体的对象资源只有一个这就要求所有共享对象资源的shared_ptrs指针中最终只能有...
1.2.2 std::shared_ptr 与std::unique_ptr不同,std::shared_ptr允许多个智能指针共享同一个对象。它通过引用计数来实现这一点,即当一个新的std::shared_ptr指向一个对象时,该对象的引用计数加一,当一个std::shared_ptr被销毁时,该对象的引用计数减一,当引用计数达到0时,对象会被自动销毁。
C++11 引入了智能指针来自动管理内存,主要包括std::unique_ptr和std::shared_ptr。这两种智能指针各有特点,适用于不同的场景。 std::unique_ptr 特点:std::unique_ptr是一种独占式智能指针,它保证同一时间只有一个指针拥有对对象的所有权。当std::unique_ptr被销毁时,它所指向的对象也会被自动删除。
std::unique_ptr和std::shared_ptr可以通过以下方式使用:
1.删除器是lambda表达式,将匿名函数具名,也可直接使用匿名函数 2.用std::make_shared<>()或std::make_unique<> 不得行,莫得这种操...
intmain(){std::unique_ptr<A>sp1;A*p=newA(1);sp1.reset(p);sp1.reset(newA(2));//sp1原来指向的A(1)会析构std::unique_ptr<A>sp3;sp3.reset(sp1.release());//SP1变成null,reset参数为普通指针的形式。相当sp3 = move(sp1);//sp3 = move(sp1); 与上面的reset等价,显然,用move比较好理解。