c++析构函数

析构函数·

定义一个对象,c++自动调用构造函数建立该对象并进行初始化,那么当一个对象的生命周期结束时,c++会自动调用一个函数注销该对象并进行善后工作,这个特殊的成员函数叫做析构函数

析构函数和类名相同,但在前面要加,如CGoods().

析构函数无函数返回类型,与构造函数在这方面是一样的。但析构函数不带任何参数。

一个类只有一个析构函数,这是和构造函数不一样的,

对象注销时,系统自动调用析构函数。

若类说明中没有给出析构函数,则c++会给出一个缺省的析构函数。

class complex

{

   double real;

   double image;

public:

complex():real{},image{}

{

cout<<"create object:"<<this<<endl;

}

complex(double r,double i):real{r},image{i}{

cout<<"create object:"<<this<<endl;

}

~complex()

{

cout<<"destroy object:"<<this<<endl;

}

void print()const

{

cout<<"real="<<real<<'t'<<"image="<<image<<endl;

}

};

类的对象不能调动构造函数,但对象可以调动析构函数,对自己销毁。

构造函数是对资源的获取,析构函数是释放资源。

class Int()

{

private:

value;

public:

Int (int x=0):value(x)

{

cout<<"create Int:"<<this<<value<<endl;

}

~Int():value()

{

cout<<"destory Int:"<<this<<endl;

}

void print() const

{

cout<<value<<endl;

}
void show()const{
cout <<"Int::show"<<endl;
}

};



int main()

{

Int a(1);

Int b(2);

Int c(3);

return 0;

}
int main()

{

Int *ip=nullptr;

ip->show();

ip->print();

return 0;

}

ip指针可以调用show,但是不能调用print,因为print中打印value需要对ip解引用。

局部变量区设置为栈区。上面的例子中调用构造函数的顺序为abc,调用析构函数的顺序为cba。

在c++中开辟了空间没有对象,当想给这块空间赋值时需要使用定位new

如 int *p=new Int(10)(区别int *p=new Int{10})

new开辟空间时不用去判空,因为如果开辟失败会有返回bad alloc.(malloc 与 operator new的区别,开辟失败时的返回)。

//ip用operator new来开辟,释放时也用operator delete
for (int i=0;i<n;++i){

new(&ip[i]) Int(i)

}

ps:成员函数设计时加const的好处:1.安全2.通用性好,既适用于普通对象也适用于常对象。

属性的值不能被外部找到,要想看到得通过函数将值带出来。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值