Electronic Joint Business

Solution for E-Business

C++11 智能指针

文章评价: 许多程序员总避免使用指针,因为一旦处理不当,就会带来很多问题。所以新手程序员都不太喜欢指针。使用指针可能会引发许多问题,例如需确保指针所引用的对象的生命周期、虚引用(dangling references)和内存泄漏。 如果某内存块为多个指针变量所引用,而其中有个变量释放了这片内存,就会造成虚引用(dangling references)。另一种情况是,程序员从堆里申请了内存块,但未进行释放,这时则会造成内存泄漏。 某些资深程序员可能会说,你看我正确地从堆里获得了内存,进行相关操作,最后也正确地释放了内存, 这段代码干净漂亮,为什么还需要智能指针呢? void Foo( ) {     int* iPtr = new int[5];     //manipulate the memory block     .     .     .     delete[ ] iPtr;     } 的确,上面的代码目前工作正常,在理想情况下也能正确地释放内存。但如果考虑运行代码时的实际环境,在内存分配与释放之间存在着许多指令,这些指令可以做一些乱七八糟的事,比如访问无效的内存位置、除零错,甚至可能你的同事修改了你的代码,添加某种条件下的 return 语句。 前两种情况会产生异常,而第三种情况则导致函数过早退出,一旦发生了这些情况,释放内存的那条语句将永远无法被执行,从而导致了内存泄漏。所有这些问题的一站式解决方案是使用智能指针(如果它们足够智能的话)。 什么是智能指针? 智能指针是按 RAII 惯用法(Resource Acquisition Is Initialization)建模的类,用来管理动态分配的内存。它提供了普通指针所有接口,并自带一些异常。智能指针会在其构造器中申请并拥有内存,一旦超过作用域,则又会释放这些内存。通过这个办法,程序员可以从手工管理动态分配内存的工作中释放出来。 在 C++98 中引入了它自己的智能指针,即 […]

,

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.