У меня есть класс:C++ деструктор не вызвал?
class Rectangle {
int width;
int height;
public:
Rectangle(int w, int h) {
width = w;
height = h;
cout << "Constructing " << width << " by " << height << " rectangle.\n";
}
~Rectangle() {
cout << "Destructing " << width << " by " << height << " rectangle.\n";
}
int area() {
return width * height;
}
};
int main()
{
Rectangle *p;
try {
p = new Rectangle(10, 8);
} catch (bad_alloc xa) {
cout << "Allocation Failure\n";
return 1;
}
cout << "Area is " << p->area();
delete p;
return 0;
}
Это довольно простой пример C++. Я собрал в Linux g ++ и запустил его. Внезапно я обнаружил, что delete p
не называют ~ Rectangle() ... я должен видеть строку, как "Destructing " << width << " by " << height << " rectangle."
, но я не сделал ....
, но почему? Удаление объекта должно вызвать деструктор этого объекта, не так ли?
Можете ли вы опубликовать код своего деструктора и кусок кода, на самом деле называющий его? –
Последнее сообщение, напечатанное до вызова 'delete', не заканчивается символом новой строки. Скорее всего, сообщение деструктора конкатенируется с 'Area is 80', возможно, вы его пропустили. –
[Он делает] (http://ideone.com/2fTkV) Покажите нам код ** Вы ** собрали и побежали. –