·目的是实现类型的自动转换
·只有一个参数,而且不是复制构造函数的构造函数
·需要的时候,编译器会自动调用转换构造函数,建立临时变量
exp.
class Complex{
public:
double real,imag;
Complex(int i){//类型转换构造函数
cout<<"AAA"<<endl;
real=i;
imag=0;
}
Comoplex(double r,double i){real=r;imag=i;}
};
int main()
{
Complex c1(7,8);
Complex c2=12;
c1=9;//9被自动转换成一个临时Complex对象
cout<<c1.real<<","<<c1.imag<<endl;
return 0;
}
构造函数在对象构造的时候起作用而析构函数在对象消亡的时候起作用
·名字与类名相同,在前面加‘~’,没有参数和返回值,一个类最多只有一个析构函数。(构造函数可以有多个
·析构函数对象消亡时即自动被调用。可以用来释放分配的空间等
·如果定义类的时候没有编写析构函数,系统自动生成缺省的析构函数
·定义了系统就不生成
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"<<endl;}
};
int main(){
Ctest array[2];
cout<<"End Main"<<endl;
retur 0;}
delete运算导致析构函数调用
exp.
Ctest *pTest;
pTest=new Ctest;//构造函数调用
delete pTest;//析构函数调用
-----------------------------
pTest=new Ctest[3];//构造函数调用3次
delete [] pTest;//析构函数调用3次
若new一个对象数组,那么用delete释放时应该写[]。否则只delete一个即只调用一次析构函数

输出:
destructor(形参sobj消亡时
destructor(临时对象fun(obj)消亡时
destructor(全局变量CMyclass obj消亡时
原文:https://www.cnblogs.com/AirBirdDD/p/12258629.html