您的位置:首页 > 其它

shared_ptr的学习记录

2017-03-29 10:54 204 查看
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。这里并不会给智能指针带来什么弊端,因为智能指针都释放了,也就不可能访问到它指向真正对象的成员变量了(指针变量)。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: