Я новичок в деструкторах, и обучающие материалы, которые я посещал, были довольно ясными до этого момента. Что на самом деле происходит при вызове деструктора? Почему я все еще получаю значения от уничтоженного объекта?Новое для деструкторов (C++)
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;
}
Вы не хотите явно вызывать деструкторы. Поскольку ваши объекты выделены в стеке, деструкторы будут вызваны автоматически, когда ваша функция вернется. – RJM
@RJM Не все объекты создаются в стеке, но ваша точка остается в силе. –
Вы вряд ли когда-либо называете деструктор явно, а box1 & 2 здесь являются автоматическими переменными, в этом случае деструкторы вызываются, когда область выходит из блока. –