回到主线上,为了方便阅读,将上面shared_ptr转换代码重新贴出如下图所示,通过对get成员函数的调用获取被智能指针管理对象的裸指针,然后通过调用static_cast对该裸指针进行强制类型转换获取到转换之后对应类型的裸指针,并且将该指针传入到shared_ptr的构造函数,用来构建转换之后的shared_ptr实例 上面代码行6还将转换前的sha...
}intmain(){std::shared_ptr<int>p(newint[10], [](int* p){delete[] p;});//lambdastd::shared_ptr<int>p1(newint[10], std::default_delete<int[]>());//指定默认删除器std::shared_ptr<char> p2 =make_shared_array<char>(10);//自定义泛型方法} shared_ptr 共享指针是怎样计数的 共享...
把shared_ptr设置为nullptr就可以让shared_ptr去释放所管理的裸指针。 类摘要 template<classT>classshared_ptr{public:typedefT element_type;// 内部类型定义shared_ptr();// 构造函数template<classY>explicitshared_ptr(Y * p);template<classY,classD>shared_ptr(Y * p,D d); ~shared_ptr();// 析构...
1. shared_ptr的实现 2. weak_ptr的实现 3. enable_shared_from_this的实现 这个版本的智能指针是我去看了本机上GNU C++标准库中shared_ptr源码后写的,在我的ubuntu22.04上,源码位置在/usr/include/c++/12/bits/shared_ptr_base.h和/usr/include/c++/12/bits/shared_ptr.h下。GNU源码的可读性并不那么好...
《为何优先选用unique_ptr而不是裸指针?》中说到,如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多。shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时,该对象也就会自动销毁。因此,善用shared_ptr,能够远离内存泄漏。
operator*:解引用操作符,用于获取 unique_ptr 所指向对象的引用。 operator->:箭头操作符,用于通过 unique_ptr 访问对象的成员函数或成员变量。 get:返回指向所管理对象的裸指针。 reset:重置 unique_ptr,释放当前所管理的对象并接管新的对象。 release:释放对所管理对象的控制权,并返回该指针的裸指针。
当3个共享指针调用reset之后就会重置,不再指向原来的物体。 3个共享指针都重置之后,就没有共享指针指向开头的ball,自动释放了 03:30 引用计数:数一数多少共享指针指向同一个物体 04:07 共享指针的get方法:获取裸指针 当多个共享指针和一个裸指针都指向同一个物体,当所有的共享指针都被摧毁,裸指针...
2.2 std::unique_ptr 可以完成std::auto_ptr中任何事,效率一样高,不用扭曲语意去复制对象。 3 高效使用std::unique_ptr(管理具备专属对象的资源) std::unique_ptr拥有和裸指针相同的尺寸,对于大多数情况和裸指针一样高效。std::unique_ptr不允许复制,否则两...
办法是有的,就是使用 std::tr1::weak_ptr。weak_ptr,顾名思义,是一个 “弱” 一点的智能指针,它不会增加引用计数,当你需要使用这个对象的时候,可以从 weak_ptr 临时生出一个 shared_ptr 来 (通过 lock 函数),这个临时的 shared_ptr 生命结束以后,就会把引用计数减小 1,这样就不会出现互相死锁的情况了...