本文来写一个shared_ptr的简单实现,假定我们写的简单shared_ptr的类名叫做SimplePtr,下面通过一些细节的拆分来一步一步实现这个SimplePtr 一、支持多种数据类型 首先要考虑的一个问题是需要支持多种数据类型,那么自然的想到要用模板: template<typename T> class SimplePtr {}; 二、成员变量构成 SimplePtr的成员变...
shared_ptr是C++11引入的一种智能指针,它可以自动管理指向动态分配对象的指针,并在不再使用时自动释放内存。shared_ptr的特点是可以在多个线程之间安全地共享同一个对象,而不需要额外的同步操作。 要实现完全线程安全的shared_ptr,我们需要使用原子操作来保证对指针的访问和修改是线程安全的。具体来说,我们可以使用std...
shared_ptr<T>ptr(newT);// T可以是int、char、class等各种类型shared_ptr<std::string>sps(newstd::string("smart"));// 一个string的shared_ptrassert(sps->size() ==5);// 使用箭头操作符->shared_ptr<int>dont_do_this(newint[10]);// 错误用法,不能正确释放内存 增加计数 被引用会增加计数 ...
shared_ptr实现代码(只实现核心功能) #include <iostream> using namespace std; template<class T> class shared_ptr{ private: T* m_ptr; //被封装的指针 unsigned int shared_count; //引用计数,表示有多少个智能指针对象拥有m_ptr指向的内存块
shared pointer共享被管理对象所有权是通过共用同一个控制块来实现的 从其他shared_ptr对象构造 下面代码是通过其他的已经存在的shared_ptr对象来构建shared_ptr对象对应的构造函数的左值版本 如上述代码所示,该构造函数通过__r形参以左值引用的形式接受另外一个shared_ptr对象,通过该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使用方法 使用该智能指针(或者其他两种)需要导入头文件#include <memory> 创建空指针 明确指向 拷贝构造 除此之外还可以对shared...