首先我们看看 shared_ptr 相关的类,主要是 __shared_ptr、__shared_count 和 _Sp_counted_base 这三个。shared_ptr 继承 __shared_ptr,__shared_ptr 有两个成员变量:对象指针 _M_ptr 和引用计数 _M_refcount。引用计数 __shared_count 主要借助 _Sp_counted_base 实现。 1.2、_Sp_counted_base<Lp>_Sp...
# 智能指针 做为类的成员变量 可以在类中使用智能指针作为成员变量,需要根据所有权情况,判断使用哪一种智能指针 1、unique_ptr: 当该对象仅仅属于我时,比如 父对象中指向子对象的指针; 2、原始指针: 当该对象不属于我,但他释放前,我必然被释放。比如:子对象中指向父对象的指针;-- unique_ptr 和 原始指针 一...
2. 成员变量 public:typedefstd::tuple<typename _Pointer::type,_Dp>__tuple_type;__tuple_type _M_t; 内部变量_M_t是一个tuble类型的二元组,第一个元素的类型是_pointer::type。 第二个元素的类似是_Dp,存放空间释放器对象。第一个元素的类型看起来比较复杂,继续往下看实现: _Pointer 是unique_ptr的类...
智能指针通常提供直接访问其原始指针的方法。 STL 智能指针拥有一个用于此目的的 get 成员函数,CComPtr拥有一个公共的 p 类成员。 通过提供对基础指针的直接访问,你可以使用智能指针管理你自己的代码中的内存,还能将原始指针传递给不支持智能指针的代码。
通过使用类成员和智能指针,我们可以实现多态行为。 首先,让我们了解一下类成员。在C++中,类成员是指定义在类内部的成员函数和成员变量。通过将成员函数声明为虚函数,我们可以实现运行时多态。虚函数是在基类中声明的函数,可以在派生类中进行重写。这样,当我们通过基类指针或引用调用该函数时,将根据实际对象的类型...
const成员函数中不能修改成员变量,但是可以修改成员指针所指向对象。如const std::string& front() const中修改data所指对象,但是不能修改data本身。 std::out_of_range(msg);为一个越界异常。 这里的接受initializer_list的转换构造函数没有定义为explicit的,这样的好处是使用方便,可以进行隐式的转换。缺点是不易调...
这里的成员变量mRefs的类型为weakref_impl指针,weakref_impl类的incWeak函数我们在前面已经看过了,它的作用就是增加对象的弱引用计数。函数最后返回mRefs,于是,弱指针对象的成员变量m_refs就指向目标对象的weakref_impl对象了。 再来看析构函数: template<typename T> ...
当一个类继承了enable_shared_from_this类,就继承了_Wptr这个成员变量。 当使用shared_ptr< A >(new A())第一次构造智能指针对象时,就会初始化一个作为观察者的弱智能指针_Wptr指向A对象资源。 再通过shared_from_this()方法代替shared_ptr的普通构造函数来返回一个shared_ptr对象,从而避免产生额外的引用计数对...
weakpointer 也是指向一个对象,但是弱引用仅仅记录对象的地址,不能通过弱指针来访问该对象,也就是说不能通过弱指针来调用对象的成员函数或者访问对象额度成员变量想访问弱指针指向的对象,首先要将弱指针升级为强指针(通过wp 类所提供的promote()方法),弱指针所指向的对象有可能是在其他地方被销毁的,如果对象已经被销...
share_ptr虽然已经很好用了,但是有一点share_ptr智能指针还是有内存泄露的情况,当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。 weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的shared_...