C++的优秀特性6:智能指针】的更多相关文章

这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr). shared_ptr shared_ptr 基本用法 shared_ptr采用引用计数的方式管理所指向的对象.当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计数加1.当shared_ptr离开作用域时,引用计数减1.当引用计数为0时,释放所管理的内存.       这样做的好处在于解放了程序员手动释放内存的压力.之前,为了处理程…
(转载请注明原创于潘多拉盒子) 其实指针不是C++的特性,而是地地道道的C的特性.有人说C++继承了C的指针,实在是败笔,造成内存泄漏云云,纯粹是不懂.可以这么说,如果没有指针,C++会逊色很多,应用的场景也会大大缩小. 指针是一个变量,这个变量和一个int型的变量没有太大的不同,只是这个变量里存储的是它指向的对象的内存地址. 指针可以指向任何对象,包括内置类型(int.long.double.float等),对象类型,函数入口,甚至另外一个指针或者可以指向任何类型 . 涉及指针的操作符包括:定…
(转载请注明原创于潘多拉盒子) 智能指针(Smart Pointer)是C++非常重要的特性.考虑如下一段使用简单指针(Plain Pointer)的代码: A* a = new A(); B* b = new B(); ...... if (condition1) { // return之前必须delete所有new出来的对象 delete a; delete b; return true; } ...... if (condition2) { // return之前必须delete所有new…
智能指针:     为什么需要智能指针?         1. malloc出来的空间,没有进行释放,存在内存泄漏的问题.          2. 异常安全问题.如果在malloc和free之间如果存在抛异常,那么还是有内存泄漏.这种问题就叫异常安 全.     RAII:         是一种利用对象生命周期来控制程序资源(如内存,文件句柄,网络连接,互斥俩个等等)的简单技术         优点:             1.不需要显示地释放资源             2.采用这种方式,…
根据C++11特性实现,基本上实现了同SharePtr同样的功能,有时间继续优化.之前一直以为引用计数是一个静态的int类型,实际上静态值是不可以的.之前项目中总是不太习惯使用智能指针.通过自实现的方式,充分了解了智能指针的实现. template <class T> class SmartPtr { public: SmartPtr(T * pointee=NULL) :_pointee(pointee),_useCount(NULL){ if(_pointee) { _useCount =…
如题,我们今天要讲的是C++11引入的三种智能指针中的最后一个:weak_ptr.在学习weak_ptr之前最好对shared_ptr有所了解.如果你还不知道shared_ptr是何物,可以看看我的另一篇文章[C++11新特性] C++11智能指针之shared_ptr. 1.为什么需要weak_ptr?在正式介绍weak_ptr之前,我们先来回忆一下shared_ptr的一些知识.我们知道shared_ptr是采用引用计数的智能指针,多个shared_ptr实例可以指向同一个动态对象,并维护了…
已经有成千上万的文章讨论这个问题了,所以我只想说:现在能使用的,带引用计数,并且能自动释放内存的智能指针包括以下几种:         unique_ptr: 如果内存资源的所有权不需要共享,就应当使用这个(它没有拷贝构造函数),但是它可以转让给另一个unique_ptr(存在move构造函数).         shared_ptr: 如果内存资源需要共享,那么使用这个(所以叫这个名字).         weak_ptr: 持有被shared_ptr所管理对象的引用,但是不会改变引用计数值.…
C++98中的智能指针通过一个模板类auto_ptr来实现,new操作符返回的指针可以交由它来管理,程序员不用再显式的调用delete,这在一定程度上避免了堆内存忘记释放的问题:不过auto_ptr有一些缺点,比如拷贝时返回一个左值,不能调用delete[]等. C++11中废弃了auto_ptr,改用unique_ptr.shared_ptr.weak_ptr等智能指针来自动回收堆分配对象,使内存管理更安全,智能指针的使用场景也变得更全面. unique_ptr和shared_ptr uniq…
enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为: template< class T > class enable_shared_from_this;       std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1, pt2, ... ) ,它们与 pt…
动态内存的使用很容易出问题,因为确保在正确的时间释放内存是极为困难的.有时我们会忘记释放内存产生内存泄漏,有时提前释放了内存,再使用指针去引用内存就会报错. 为了更容易(同时也更安全)地使用动态内存,新的标准库提供了两种智能指针类型来管理动态对象.智能指针的行为类似常规指针,区别在于它负责自动释放所指向的对象.这两种智能指针的区别在于管理底层指针的方式:shared_ptr允许多个shared_ptr类型指针指向同一个对象:unique_ptr则"独占"所指向的对象.标准库还定义了一个…