我是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;
}
答案 0 :(得分:-2)
你从不明确地调用析构函数,除非你非常清楚自己需要,因为你自己处理对象的生命周期和分配,这通常不是非常类似C ++的方法。
当C ++对象的生命周期结束时(例如,当一个对象超出范围时),将自动调用析构函数。
析构者的工作是清理&#34;在C ++运行时之前释放与该对象关联的内存。明确地调用析构函数并不会删除&#34;对象 - 它只是将对象带入某种&#34; Zombie&#34;州。
作为一个初学者,概括:不要明确地调用析构函数。