C++析构函数

来源:互联网 发布:算法实现约瑟夫环c语言 编辑:程序博客网 时间:2024/05/28 03:03

析构函数没有返回值,不能指定参数.因此只能有一个.

没有显示定义析构函数,编译器将为类生成缺省的析构函数,只清除类的数据成员所占

据的空间,对类的成员变量通过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;
}


0 0
原创粉丝点击