若动态的申请一个资源,而后应删除之,但并不能保证二者期间不出现return或者异常,而根本不经过delete。
所以总是依靠delete删除申请的资源是不靠谱的。
解决方法:C++中有一个auto_ptr,用它装载所申请的对象资源可以解决这个问题
std::auto_ptr<myclass> pmyclass(Create());
这样在申请资源的同时将其马上装入auto_ptr中。然后在使用之后,不管在何处,当auto_ptr析构之后,所申请的资源将自动的释放,而不用我们去管理。
另存在一个问题,当资源释放过程中产生异常,那就需要令讨论了。
需要注意的是:不要让多个auto_ptr同时指向一个资源。否则出现不同步现象。 为此 auto_ptr对拷贝构造函数和赋值函数都进行了特殊的定义,调用他俩,返回的都是null;
它的这个特性就决定了不能有一个以上的auto_ptr指向相同的资源。 对于容器来说,这个特性很坑爹
代替的方案是:引用计数。类似于COM中的引用计数?
std::tr1::shared_ptr<myclass> pmyclass(Create());
这样就可以用pmyclass1=pmyclass2;等操作了。当两个指针都销毁,那么指向的资源也自动的销毁。
注:auto_ptr和shared_ptr的delete操作是在析构函数中的。而且是delete,不是delete[ ]。所以指向数组类的对象,就不行了。