析构函数新手(C ++)

时间:2016-05-27 13:06:42

标签: c++ destructor

我是destructors的新手,我一直关注的教程在此之前一直很清楚。调用析构函数时实际发生了什么?为什么我仍然从被破坏的对象中获取值?

class Box {

public: 
    Box(double l = 2.0, double b = 2.0, double h = 2.0) {   //Constructor
        cout << "Box Created" << endl;
        length = l;
        breadth = b;
        height = h;
    }
    ~Box() {
        cout << "Box Destroyed" << endl; // Box Destructor
    }
        double volume() {
            return length*breadth*height;
        }

private:
    double height;
    double breadth;
    double length;

};
void main() {

    Box Box1(10, 15, 5);    //Constructors used
    Box Box2(5, 15, 20);

    cout << "Box1.volume: " << Box1.volume() << endl;
    cout << "Box2.volume: " << Box2.volume() << endl;
    Box1.~Box(); //Destructors called
    Box2.~Box();
    cout << "Box1.volume after destruction: " << Box1.volume() << endl;
    cout << "Box2.volume after destruction: " << Box2.volume() << endl;



}

1 个答案:

答案 0 :(得分:-2)

从不明确地调用析构函数,除非你非常清楚自己需要,因为你自己处理对象的生命周期和分配,这通常不是非常类似C ++的方法。

当C ++对象的生命周期结束时(例如,当一个对象超出范围时),将自动调用析构函数。

析构者的工作是清理&#34;在C ++运行时之前释放与该对象关联的内存。明确地调用析构函数并不会删除&#34;对象 - 它只是将对象带入某种&#34; Zombie&#34;州。

作为一个初学者,概括:不要明确地调用析构函数。