ArrayDeletor

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

C++中有auto_ptr,可以把动态分配的内存自动的delete掉,但是auto_ptr有个缺点,就是不能delete数组。即它只能调用delete,不能调用delete[]。可以设计这样一个类来自动调用delete[]来释放数组并正确调用析构函数:

template <typename T>

class ArrayDeletor {

private:

T * array_;

public:

ArrayDeletor(T * array): array_(array) {}

T *release() { T * ret = array_; array_ = 0; return ret; }

~ArrayDeletor() { if (array_ != 0) delete[] array_; }

};

usage:

T * f() //函数要求返回分配的对象数组

{

T * a = new A[10];

ArrayDeletor<A> deletor(a);

...

if (error) return 0;

...

if (exception) throw exception(); //也不会内存泄漏

...

return deletor.release(); //传递owership

}

C++语言的自动调用析构函数是个非常有用的功能,利用这个功能可以大大减少资源的泄漏

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航