Exceptional C++提到了以下代码
template <class T> class Stack
{
public:
Stack();
~Stack();
/*...*/
private:
T* v_; // ptr to a memory area big
size_t vsize_; // enough for 'vsize_' T's
size_t vused_; // # of T's actually in use
};
template<class T>
Stack<T>::Stack()
: v_(new T[10]), // default allocation
vsize_(10),
vused_(0) // nothing used yet
{
}
Run Code Online (Sandbox Code Playgroud)
它说如果其中一个T构造函数抛出,那么完全构造的任何T对象都被正确销毁,最后,自动调用operator delete来释放内存.这让我们防漏.
我的理解是,如果构造函数抛出异常,应用程序应该清理任何分配的资源.以上如何防漏?