本人学习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做出分析。其实这些模版类都有对应的代码,大家有兴趣可以学习。
本文深入探讨C++中对象管理资源的策略,着重讲解auto_ptr与shared_ptr的使用,通过实例展示如何利用智能指针简化资源管理,减少内存泄漏风险。同时,对比传统资源管理方式,突出现代C++库提供的解决方案的优势。
&spm=1001.2101.3001.5002&articleId=7965148&d=1&t=3&u=14d3b069b4d54fe0a168a43f0e3dfe80)
1万+

被折叠的 条评论
为什么被折叠?



