2011-12-26 3 views
-3

У меня есть класс: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." , но я не сделал ....

, но почему? Удаление объекта должно вызвать деструктор этого объекта, не так ли?

+0

Можете ли вы опубликовать код своего деструктора и кусок кода, на самом деле называющий его? –

+0

Последнее сообщение, напечатанное до вызова 'delete', не заканчивается символом новой строки. Скорее всего, сообщение деструктора конкатенируется с 'Area is 80', возможно, вы его пропустили. –

+3

[Он делает] (http://ideone.com/2fTkV) Покажите нам код ** Вы ** собрали и побежали. –

ответ

1

Вы не закончили линию, поэтому линия не выводилась. Добавьте << endl к печати.

+0

YEs ... Какой я дурак ... – barfatchen

+0

Любопытный. Почему буфер не сбрасывается при выходе программы? – sharptooth

+0

Построение прямоугольника 10 на 8. Площадь 80Destructing 10 на 8 прямоугольника. Они слиты в одну линию, и я пропустил это! – barfatchen

Смежные вопросы