析构函数没有返回值,不能指定参数.因此只能有一个.
没有显示定义析构函数,编译器将为类生成缺省的析构函数,只清除类的数据成员所占
据的空间,对类的成员变量通过new和malloc动态申请的内存无能为力,应该在析构函数
中通过delete或free释放,避免对象撤销造成内存泄露.
什么时候被调用?
1全局定义的对象,main之前,就调用全局对象的构造函数,程序结束时调用析构函数
2局部定义的对象,每当程序流程到达该对象的定义出就调用构造函数,离开作用域就
调用对象的析构函数
3static定义的对象 到达定义处就调用构造函数,结束时调用析构函数
4new创建的对象,创建对象时调用构造函数,当delete时删除该对象,调用析构函数
#include <string.h>
#include <iostream>
class Computer
{
public:
Computer(const char * pBrand, float fPrice)
: fPrice_(fPrice)
{
//不直接赋值,而采用动态分配,每个对象内部都有一份自己的数据
//不能依赖外部的变量.
pBrand_ = new char[strlen(pBrand) + 1];
strcpy(pBrand_, pBrand);
std::cout << "Computer(const char*, float)" << std::endl;
}
~Computer()//对象被销毁的时候调用析构函数
{//没有返回值,没有参数,只有一个
std::cout << "~Computer()" << std::endl;
delete []pBrand_;
}
void print()
{
std::cout << "品牌: " << pBrand_ << std::endl;
std::cout << "价格: " << fPrice_ << std::endl;
}
private:
char *pBrand_;
float fPrice_;
};
int main(void)
{
{
Computer pc1("Dell", 7000);
pc1.print();
//pc1.~Computer();//不要显式去调用析构函数
}
Computer *pc = new Computer("Mac", 10000);
pc->print();
delete pc;
//Computer pc2;
return 0;
}