shared_ptr的学习记录


1、对智能指针本身赋值操作,拷贝构造都会对计数器加1。这些特性的真正决定者是计数器的赋值、拷贝构造函数。


2、对指向对象本身的析构发生在计数器析构时,判断计数器的成员变量(int)为1时做减1操作,并且析构指向的对象。计数器用来计数的成员变量的类型决定了最多有多少次引用,在linux64位系统上int是32位。


3、对以下这段代码的理解。对友元类的

private:
    template<class Y> friend class shared_ptr;
    template<class Y> friend class weak_ptr;

其含义参考下面例子的理解

类模板或函数模板可以作为其他类的友元,不过由于其特殊性可以做一些限制。

template<typename T>
class base
{
    template<typename Y> friend class he; // 表示所有类型的模板类对象都是友元

    friend class he<int>; // 表示只有int类型形参的模板类对象才是友元 
    friend class he<T>;   // 表示只有类型形参和base类型参数一致的模板类对象才是友元
}

4、关于释放。真正对象的释放是由计数器类的析构函数操作的,使用的是delete。(插入一个小常识:delete释放指针指向的内存,后并不会将指针置为NULL。这里并不会给智能指针带来什么弊端,因为智能指针都释放了,也就不可能访问到它指向真正对象的成员变量了(指针变量)。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值