fork download
  1. #include <iostream>
  2.  
  3. struct Base {
  4. virtual ~Base() {
  5. std::cout << "Base destructor\n";
  6. }
  7. virtual void sayHi() {
  8. std::cout << "Base says hi\n";
  9. }
  10. };
  11.  
  12. struct Derived : Base {
  13. ~Derived() override {
  14. std::cout << "Derived destructor\n";
  15. }
  16. void sayHi() override {
  17. std::cout << "Derived says hi\n";
  18. }
  19. };
  20.  
  21. struct Container {
  22. Derived derivedMember;
  23. Base& baseRef;
  24.  
  25. Container() : baseRef(derivedMember) {}
  26. ~Container() {
  27. std::cout << "Container destructor\n";
  28. // No explicit virtual call here!
  29. }
  30. };
  31.  
  32. Container globalContainer;
  33.  
  34. int main() {
  35. std::cout << "Main start\n";
  36. // No explicit use
  37. return 0;
  38. }
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
Main start
Container destructor
Derived destructor
Base destructor