У меня есть следующий код и, как я знал, в конце программы, которая использует конструкторы классов, если определенные объекты были созданы, они уничтожены. Судя по тому, что в конце выполнения я должен У меня были некоторые «~ B()» и «~ D()», напечатанные в определенном порядке, но этого не происходит, когда я запускаю код. Почему?Конструкторы и деструкторы
#include<iostream>
#include<stdlib.h>
using namespace std;
class B{
public:
B(){cout<<"B()";}
virtual void print(){cout<<"b";}
~B(){cout<<"~B()";}
};
class D:public B{
public:
D(){cout<<"D()";}
void print(){B::print()
;cout<<"d";}
~D(){cout<<"~D()";}
};
void testI(){
B* b[]={new B(),new D()};
b[1]->print();
B&c=*b[1];
c.print();
}
int main(){
testI();
return 0;
}
Где 'delete' (а' B' требует 'virtual' destructor)? – hmjd
Потому что вы создаете объекты с 'new' и не вызываете' delete'. Попробуйте 'int main() {B b; } ' – juanchopanza