注:源码来源为 llvm/llvm-project
使用智能指针时我们所包含的头文件为<memory>
,而关于shared_ptr<T>
的类定义实际上在shared_ptr.h
中,为了便于理解,此处仅从源码中截取出其部分构造函数、成员变量以及重载的赋值运算符:
template<class _Tp>
class shared_ptr
{
private:
element_type* __ptr_; // 所管理的对象内存的指针
__shared_weak_count* __cntrl_; // 引用计数相关的指针
......
shared_ptr() _NOEXCEPT : __ptr_(nullptr), __cntrl_(nullptr) {
}
explicit shared_ptr(_Yp* __p) : __ptr_(__p) {
// 传入堆内存指针的构造函数
unique_ptr<_Yp> __hold(__p)