fork(1) download
  1. #include <iostream>
  2.  
  3. class Base
  4. {
  5. public:
  6. Base() { std::cout << "Base" << std::endl; }
  7. virtual ~Base() { std::cout << "~Base" << std::endl; }
  8. };
  9.  
  10. class Derived : public Base
  11. {
  12. public:
  13. Derived() { std::cout << "Derived" << std::endl; }
  14. virtual ~Derived() { std::cout << "~Derived" << std::endl; }
  15. };
  16.  
  17.  
  18. template<class T> T *Safe_Or_Not (T *object)
  19. {
  20. object->T::~T ();
  21. ::new (object) T;
  22. return object;
  23. }
  24.  
  25. int main(int argc, char *argv[])
  26. {
  27. Base* b = new Derived;
  28.  
  29. b = Safe_Or_Not(b);
  30. delete b;
  31. return 0;
  32. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
Base
Derived
~Base
Base
~Base