在C++中,shared_ptr 是一种智能指针,它可以用来管理动态分配的内存。shared_ptr 有一个 get 方法,用于获取它所指向的指针。还有一个 data 方法,用于获取指针所指向的对象的值。 1. get 方法 get 方法返回一个指向底层对象的指针。这个指针的类型与 shared_ptr 的类型相同,但是它不具有引用计数功能。这意味着,...
#include "Thread.hpp" #include <unordered_map> #include <memory> using thread_ptr_t = std::shared_ptr<ThreadModule::Thread<int>>; #define NUM 10 class threadData { public: int max; int start; }; void Count(threadData td) { for(int i = td.start; i < td.max; i++) { std:...
智能指针循环引用: 当两个shared_ptr智能指针调用两个相互调用的类的时候依然会存在内存泄露的情况,因为只有到user_count=0的时候才能释放该智能指针相互都在等待对方释放资源: 用weak_ptr可以打破智能指针循环引用所出现的问题。 当外部有share_ptr在管理weak_ptr资源时则该指针是有效的,否则无效用lock()来控制 如果...
classNode{public:shared_ptr<Node>next;// 拥有下一个节点weak_ptr<Node>prev;// 非拥有前驱节点int data;Node(int val):data(val){}~Node(){cout<<"Node "<<data<<" destroyed"<<endl;}};voidbuildList(){auto node1=make_shared<Node>(1);auto node2=make_shared<Node>(2);node1->next=node...
std::shared_ptr<int>p7 (std::move(p6)); std::shared_ptr<int> p8 (std::unique_ptr<int>(newint)); std::shared_ptr<C> obj (newC); std::shared_ptr<int> p9 (obj, obj->data); std::cout<<"use_count:\n"; std::cout<<"p1:"<< p1.use_count() <<'\n'; ...
struct C {int* data;}; int main () { std::shared_ptr<int> p1; std::shared_ptr<int> p2 (nullptr); std::shared_ptr<int> p3 (new int); std::shared_ptr<int> p4 (new int, std::default_delete<int>()); std::shared_ptr<int> p5 (new int, [](int* p){delete p;}...
返回智能指针:当函数返回一个动态分配的对象时,可以使用std::unique_ptr或std::shared_ptr,具体取决于对象是否需要共享所有权。 nullptr 检查:在使用智能指针之前,确保智能指针不为空。可以使用if (ptr)或if (ptr.get() != nullptr)进行检查。 自定义删除器:如果智能指针管理的资源需要特殊的删除操作,可以使用自...
shared_ptr pdata1(new base);shared_ptr pdata2 = pdata1->get_ptr(); return 0; } 这种情况下就不会存在内存重复释放的的情况。问题2: shared_ptr是如何实现这个enable_shared_from_this 这个功能。查看boost源码:enable_shared_from_this 中有一个weak_ptr的成员。在构造share_ptr的构造函数中,会加载...
int* p = spData.get(); for(int i = 0; i < N; ++i) { cin>>*p; // 通过普通指针直接访问这块内存资源 ++p; // 对普通指针进行加1运算,使其指向下一个int数据 } } 这里值的提醒的是,用get()函数获得shared_ptr所管理内存资源的地址,实际上就是从shared_ptr手中盗取了这块内存资源的管理权...
引用计数指的是,所有管理同一个裸指针(raw pointer)的shared_ptr,都共享一个引用计数器,每当一个...