析构函数·
定义一个对象,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.通用性好,既适用于普通对象也适用于常对象。
属性的值不能被外部找到,要想看到得通过函数将值带出来。
1018

被折叠的 条评论
为什么被折叠?



