fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class VirtualDestructor {
  5. public:
  6. virtual ~VirtualDestructor() {};
  7. };
  8.  
  9. class Foo : public VirtualDestructor {
  10. public:
  11. Foo() { _a = new int(10); }
  12. ~Foo() { delete _a; cout << "Foo destructor\n"; }
  13. private:
  14. int* _a;
  15. };
  16.  
  17. class NoVirtualDestructor {
  18. };
  19.  
  20. class Bar : public NoVirtualDestructor {
  21. public:
  22. Bar() { _a = new int(10); }
  23. ~Bar() { delete _a; cout << "Bar destructor\n"; }
  24. private:
  25. int* _a;
  26. };
  27.  
  28. int main() {
  29. // your code goes here
  30. VirtualDestructor* vd = new Foo();
  31. delete vd; // будет вызван деструктор Foo. Память под _a освободится
  32. NoVirtualDestructor* nvd = new Bar();
  33. delete nvd; // не будет вызван деструктор Bar. Память под _a останется. Утечка памяти
  34. return 0;
  35. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
Foo destructor