代码改变世界

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;
}
gx 

从结果可以看到程序结束的时候调用了类的析构函数,调用的顺序和声明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;
}
gx1 

如果动态分配个Box对象,退出程序不删除它,那么就不会调用相应的析构函数,但是这样是很严重的错误,每个动态内存分配都应该对应一个删除操作,如果指针还有可能使用就应该把指针重置为空指针。

Box* b2=new Box(4,5,6);
b2->Volum();
delete b2;
gx2 

删除分配内存以后在退出main方法前就已经调用了b2指向对象的构析函数。

 

本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。