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;
}
- 析构函数(C#)
- C++--------析构函数
- c++::析构函数
- C++-析构函数
- 构造函数和析构函数【c++】
- c++-构造函数与析构函数
- C++-构造函数,析构函数
- [c++]构造函数和析构函数
- C++--构造函数与析构函数
- 【C#】构造函数和析构函数
- 【c#】—架构函数&&析构函数
- 【C++】构造函数和析构函数
- 【C++】构造函数和析构函数
- C++(构造函数&&析构函数)
- 【C#】构造函数&析构函数
- 【c++】构造函数与析构函数
- 【C++】类构造函数 & 析构函数
- C++:构造函数和析构函数
- 以为4天能搞定的项目,结果搞了近一个月……
- 浮点数的二进制表示学习笔记
- 知识储备:计算机网络
- poj1404题解
- 【BZOJ】1015 星球大战
- C++析构函数
- [树状数组]HDU1556 Color the ball
- 数字组合
- Javaweb传参乱码
- U盘启动显示Starting cmain()...
- java 输入与输出
- IOS学习之蓝牙4.0
- 数据结构与算法(5、链表的拼接)
- Oracle数据库应用(一)