c++析构函数
2012-09-26 17:35 kennyMc 阅读(534) 评论(0) 收藏 举报#include <iostream> using namespace std; class Man { public: char* name; int age; Man(char * Name,int Age) { this->age=Age; this->name=Name; }; void Show() { cout<<"name:"<<this->name<<endl <<"age:"<<this->age<<endl; }; ~Man(){cout<<"~Man"<<endl;}; }; class Box { public: int length; int width; int hight; Box(int Length,int Width,int Hight) { this->hight=Hight; this->length=Length; this->width=Width; }; void Volum() { cout<<"volum:"<<this->hight*this->length*this->width<<endl; }; ~Box(){cout<<"~Box"<<endl;}; }; int main() { Box b1(1,2,3); b1.Volum(); char* name="Kenny"; Man m1(name,18); m1.Show(); system("PAUSE"); return 0; }
从结果可以看到程序结束的时候调用了类的析构函数,调用的顺序和声明b1和m1的顺序相反。
这里b1和m1是放在栈里面,栈是先进后出,所以构析函数的调用顺序和声明顺序相反。
int main() { Box b1(1,2,3); b1.Volum(); char* name="Kenny"; Man m1(name,18); m1.Show(); Box* b2=new Box(4,5,6); b2->Volum(); system("PAUSE"); return 0; }
如果动态分配个Box对象,退出程序不删除它,那么就不会调用相应的析构函数,但是这样是很严重的错误,每个动态内存分配都应该对应一个删除操作,如果指针还有可能使用就应该把指针重置为空指针。
Box* b2=new Box(4,5,6); b2->Volum(); delete b2;
删除分配内存以后在退出main方法前就已经调用了b2指向对象的构析函数。
本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。



浙公网安备 33010602011771号