C++笔记7

类型转换构造函数

是什么

·目的是实现类型的自动转换
·只有一个参数,而且不是复制构造函数的构造函数
·需要的时候,编译器会自动调用转换构造函数,建立临时变量
exp.

class Complex{
public:
double real,imag;
Complex(int i){//类型转换构造函数
cout<<"AAA"<

析构函数

构造函数在对象构造的时候起作用而析构函数在对象消亡的时候起作用

是什么

·名字与类名相同,在前面加‘~’,没有参数和返回值,一个类最多只有一个析构函数。(构造函数可以有多个
·析构函数对象消亡时即自动被调用。可以用来释放分配的空间等
·如果定义类的时候没有编写析构函数,系统自动生成缺省的析构函数
·定义了系统就不生成
exp.

class String{
private:
char * p;
public:
String(){
p=new char[10];
}
~String();
};
String::~String()
{
delete[]p;
}

析构函数和数组

对象数组生命期结束时,对象数组的每一个元素的析构函数都会被调用
exp.

class Ctest{
public:
~Ctest(){cout<<"destructor called"<

析构函数和运算符delete

delete运算导致析构函数调用
exp.

Ctest *pTest;
pTest=new Ctest;//构造函数调用
delete pTest;//析构函数调用
-----------------------------
pTest=new Ctest[3];//构造函数调用3次
delete [] pTest;//析构函数调用3次

若new一个对象数组,那么用delete释放时应该写[]。否则只delete一个即只调用一次析构函数

析构函数在对象作为函数返回值返回后被调用

C++笔记7_第1张图片
输出:
destructor(形参sobj消亡时
destructor(临时对象fun(obj)消亡时
destructor(全局变量CMyclass obj消亡时

你可能感兴趣的:(C++笔记7)