|
|
ArrayDeletor |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
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++语言的自动调用析构函数是个非常有用的功能,利用这个功能可以大大减少资源的泄漏

|
|
相关文章:相关软件: |
|