c++里面可能出现的内存问题大致有这么几个方面:
1、缓冲区溢出(buffer overrun)
2、空悬指针、野指针
3、重复释放(double delete)
4、内存泄漏(memory leak)
5、不配对的new/delete
6、内存碎片(memory fragmentation)
正确的使用智能指针可以解决前面5个问题。
删除共享对象
使用shared_ptr解决的主要问题是知道删除一个被多个客户共享的资源的正确时机。下面是一个简单易懂的例子,有两个类 A和 B, 它们共享一个int实例。使用 boost::shared_ptr, 你必须包含"boost/shared_ptr.hpp".
#include "boost/shared_ptr.hpp" #include <cassert> class A { boost::shared_ptr<int> no_; public: A(boost::shared_ptr<int> no) : no_(no) {} void value(int i) { *no_=i; } }; class B { boost::shared_ptr<int> no_; public: B(boost::shared_ptr<int> no) : no_(no) {} int value() const { return *no_; } }; int main() { boost::shared_ptr<int> temp(new int(14)); A a(temp); B b(temp); a.value(28); assert(b.value()==28); }