本文来写一个shared_ptr的简单实现,假定我们写的简单shared_ptr的类名叫做SimplePtr,下面通过一些细节的拆分来一步一步实现这个SimplePtr 一、支持多种数据类型 首先要考虑的一个问题是需要支持多种数据类型,那么自然的想到要用模板: template<typename T> class SimplePtr {}; 二、成员变量构成 SimplePtr的成员变...
从其他shared_ptr对象构造shared_ptr的方式还有通过赋值构造函数来进行构造的方式,这种方式和拷贝构造的方式是相同的,clang版本对应的实现就是简单的调用对应的拷贝构造函数来实现的,这里不展开讨论,仅仅把源代码贴出如下 析构 前面我们讨论了,shared_ptr管理对象生命周期用到了RAII计数,我们讨论了构造相关的,下面我们讨...
int num =myPtr->age; shared_ptr<Arwen> ptrOne( myPtr); //复制构造 num =myPtr->age; //如果是auto_ptr该处会出错.因为把myPtr复制给ptrOne后,它自己本身相当于失效了 num = ptrOne->age; shared_ptr<Arwen> ptrTwo = ptrOne; num = ptrOne->age;//如果是auto_ptr该处也会出错,此时ptrOne也...
把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();// 析构...
std::shared_ptr是一个 C++ 智能指针,它是通过引用计数来实现的,能够多个指针对象共享所有权。具体来说,它包含两个主要的元素: 指向管理的实际对象的指针。 指向控制块(Control Block)的指针。这个控制块包含两个引用计数(一个用于shared_ptr,一个用于weak_ptr)和管理对象的析构函数。
shared_ptr的原理:是通过引用计数的方式来实现多个shared_ptr对象之间共享资源。 shared_ptr在其内部,给每个资源都维护了着一份计数,用来记录该份资源被几个对象共享。 在对象被销毁时(也就是析构函数调用),就说明自己不使用该资源了,对象的引用计数减一。
shared_ptr的实现 我们平时看文档都知道shared_ptr内部是使用引用计数来记录托管指针被引用的次数,当托管指针的引用计数为0时会释放托管的内存,这里通过gcc源码探究shared_ptr内部究竟是如何实现的内存引用计数功能。 非标准类图如下: shared_ptr.jpg 如图,shared_ptr类几乎什么都没有做,它是继承了__shared_ptr, __...
shared_ptr的实现原理是通过引用计数来实现,只有当引用计数为1时才释放空间,否则只需将引用计数减1.拷贝和赋值将引用计数加1,具体代码如下: template<typenameT>classSharedPtr{public:SharedPtr();SharedPtr(T*ptr);SharedPtr(constSharedPtr<T>&ap);~SharedPtr();//SharedPtr<T>& operator=(const SharedPtr<...
sharedptr析构的时候计数器自减1, 不会直接释放所管理的内存,而是先判断计数器是否为0,只有计数器为0的时候才释放所管理的内存空间。 实现 template<typename T>class SharedPointer{public:SharedPointer(T*);SharedPointer&operator=(constSharedPointer<T>&);SharedPointer(constSharedPointer<T>&);~SharedPointer...