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。这里并不会给智能指针带来什么弊端,因为智能指针都释放了,也就不可能访问到它指向真正对象的成员变量了(指针变量)。)
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。这里并不会给智能指针带来什么弊端,因为智能指针都释放了,也就不可能访问到它指向真正对象的成员变量了(指针变量)。)
相关文章推荐
- 智能指针Boost.smart_ptr学习4--shared_ptr
- 学习笔记:shared_ptr陷阱
- Boost源码学习---shared_ptr.hpp
- [boost库的学习]shared_ptr
- boost shared_ptr的注意事项记录
- Boost学习--初窥shared_ptr
- 学习笔记:shared_ptr陷阱
- 学习笔记:shared_ptr陷阱
- 记录以下boost::shared_ptr的一个使用细节
- 学习笔记四:boost智能指针:scoped_ptr和shared_ptr
- Boost 关于 shared_ptr 的学习心得
- boost学习scoped_ptr,shared_ptr
- Boost学习 (二)shared_ptr
- C/C++ 日常学习总结(第二十一篇)智能指针shared_ptr
- Boost库学习—智能指针Shared_ptr学习01
- 智能指针Boost.smart_ptr学习5--shared_array
- 转:学习笔记:shared_ptr陷阱
- C++学习之智能指针--auto_ptr、scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr
- C++学习 std::tr1::shared_ptr、std::tr1::weak_ptr及std::tr1::enable_shared_from_this
- Boost源代码学习---shared_ptr.hpp