例如下面的代码: class StrPtr{ public: StrPtr() : _ptr(nullptr){} //拷贝构造函数等省略... std::string* operator->() { return _ptr; } private: std::string *_ptr; }; std::string* operator->()/*这句代码的格式不是类似于前导运算符吗?类似于std::string operator*(){//...}不正是*ptr?但是重载的->运算符却是…
智能指针的出现是为了能够更加方便的解决动态内存的管理问题.注:曾经记得有本书上说可以通过vector来实现动态分配的内存的自动管理,但是经过试验,在gcc4.8.5下是不行的.这个是容易理解的,vector是个模板,它不能辨别传入的数据类型是否是指针,从而也不能进行自动的释放内存操作.如果对非new出的对象进行delete操作,反而还会引起一些不必要的问题. C++11标准库为了能够使程序员能够更安全的使用动态内存,提供了两种智能指针类型来管理动态对象. shared_ptr类 智能指针也是模板…
只能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象.智能指针定义在memory头文件中. 1. auto_ptr(C++11已经舍弃) 由new expression获得的对象,在auto_ptr对象销毁时,他所管理的对象也会自动被delete掉. auto_ptr<string> p1(new string("This is a string")); auto_ptr<string> p2; p2 = p1; 上述语句中,如果p1和p2是常规指…
笔者:刘蒿羽 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在上一篇文章中,我们分析了Android智能指针中的强指针sp,本文我们来分析弱指针wp.为什么须要弱指针wp呢?我们来考虑以下一种场景:有两个类CParent和CChild.CParent类中有一个智能指针指向CChild对象.CChild类中有一个智能指针指向CParent对象 class CParent :public LightRefBase<CParent> { --…
智能指针的使用 智能指针是在 <memory> 标头文件中的 std 命名空间中定义的. 它们对 RAII 或“获取资源即初始化”编程惯用法至关重要. 此习惯用法的主要目的是确保资源获取与对象初始化同时发生,从而能够创建该对象的所有资源并在某行代码中准备就绪. 实际上,RAII 的主要原则是为将任何堆分配资源(例如,动态分配内存或系统对象句柄)的所有权提供给其析构函数包含用于删除或释放资源的代码以及任何相关清理代码的堆栈分配对象. 大多数情况下,当初始化原始指针或资源句柄以指向实际资源时,会立…
1.shared_ptr共享智能指针 std::shared_ptr使用引用计数,每个shared_ptr的拷贝都指向相同的内存,在最后一个shared_ptr析构的时候,内存才会释放. 1.1 基本用法 1.1.1 初始化 shared_ptr可以通过make_shared来初始化,也可以通过shared_ptr<T>辅助函数和reset方法来初始化.智能指针的用法和普通指针的用法类似,不过不需要自己管理分配的内存,对于没有初始化的指针,只能通过reset来初始化,当智能指针有值,reset…
1. c++智能指针中,c++的memory文件中,有auto_ptr等各种关于智能指针的东西,shared_ptr,weak_ptr在C++11中已经成为标准. 也看了ogs的智能指针,每次引用起来比较麻烦,规则也多.方便的是自动的引用计数,可选线程安全. 为方便 写了个公用类,如下: #ifndef _test_share_ptr_h__ #define _test_share_ptr_h__ #define null 0 class student { public: student();…
一. shared_ptr的基本用法 (一)与unique_ptr的比较 比较 shared_ptr unique_ptr 备注 初始化 ①shared_ptr<T> sp; sp.reset(new T()); ②shared_ptr<T> sp(new T()); ③shared_ptr<T> sp1 = sp; //拷贝构造 ④auto sp = make_shared<int>(10); ①unique_ptr<T> up; up.res…