Effective C++学习笔记 (13)

来源:互联网 发布:淘宝模式的优势和不足 编辑:程序博客网 时间:2024/05/29 19:02

本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教尴尬

以对象管理资源

由于在写代码时很多时候需要用到资源,比如new一个对象之类的,这样一来资源的申请和释放需要程序员自己完成,对代码的逻辑需要谨慎设计,才能保证资源不会泄漏。

其实这类似的编程风格,在之前写C的时候也有编码规范来规定资源的释放,比如do while的运用啊,goto Exit0之类的方法,但是对于C++来说资源最好还是交给对象管理,这样可以大幅度减少程序员对资源的管理。

C++库提供了auto_ptr,boost库提供了shared_ptr(后面被合入C++标准库),这些智能指针都可以很好的管理资源。

下面看看auto_ptr的例子吧。


代码很简单,就上面几行,为了看到auto_ptr到底如何管理资源的,我们还是继续看汇编吧(很多时候需要认识真相我都会看看汇编o(∩_∩)o)。


在main函数退出后调用了auto_ptr的析构(因为该对象是栈变量),继续看看auto_ptr的析构做了啥。


没错,delete了指向base的指针。这样一来程序员就不用在关心对象的delete了。这其实就是effective C++上所讲的两个关键点:获得资源后立刻放进管理对象、管理对象运用析构函数确保资源被释放。

这里所讲的auto_ptr只是一个很简单的运用,其实auto_ptr只是一个很弱的智能指针,相比起shared_ptr还缺少了引用计数,所以auto_ptr在拷贝的时候都遵循一个原则“拷贝过后,被拷贝者被赋值为空”,所以在使用STL的容器模版时,是不能使用auto_ptr的。由于本机没有安装boost,所以暂时不能对shared_ptr做出分析。其实这些模版类都有对应的代码,大家有兴趣可以学习。

原创粉丝点击