delete用于释放new在堆中动态生成的对象空间。
释放时会自动调用类的析构函数,在析构函数中用于释放类内部动态分配的得到的资源。
simple:
#include <iostream>
using std::cout;
using std::endl;
class Simple{
public:
Simple(){
p = new int; //使用new分配空间
*p = 10;
pArray = new int[*p]; //使用new分配数组空间
for(int i = 0; i < *p; i++)
pArray[i] = i;
}
~Simple(){
cout << "\ndisconstuctor\n" << "now delete p" << endl;
delete p;
cout << "now delete pArray" << endl;
delete [] pArray;
//注意这里的释放配对
}
public:
void out(){
cout << "p value = " << *p << endl;
for(int i = 0; i < *p; i++)
{
cout << "array is " << *(pArray + i) << endl;
}
}
private:
//disable copy & assign control
Simple(const Simple&);
const Simple& operator=(const Simple&);
private:
int *p;
int *pArray;
};
int main()
{
Simple* s = new Simple; //生成堆对象
s->out();
delete s; //释放对象
return 0;
}
另外需要注意的是,
请为多态基类定义一个虚析构函数,并不要在析构函数中调用virtual虚函数。
程序中不要以Simple为例去自己管理指针成员,请使用auto_ptr或是tr1::share_ptr进行堆对象管理,这里的Simple只是一个晰构函数使用示例。
[
本帖最后由 hellovfp 于 2012-7-4 14:44 编辑 ]