fork(2) download
  1. #include <iostream>
  2. #include <memory>
  3. using namespace std;
  4.  
  5. class B; // <=== forward declare
  6. class C : public std::enable_shared_from_this<C> { // inherit publicly
  7. public:
  8. virtual B mymethod() =0;
  9. virtual ~C() {} // Attention: polymorphic class needs virtual destructor
  10. };
  11.  
  12. class A : public C {
  13. public:
  14. B mymethod() override;
  15. //private:
  16. int myvar;
  17. };
  18.  
  19. struct B {
  20. std::shared_ptr<C> pointer;
  21. };
  22.  
  23. B A::mymethod() {
  24. B instance;
  25. //instance.pointer = std::shared_ptr<A>(this); //<===== no longer
  26. instance.pointer = shared_from_this(); //<===== RETURN A POINTER TO SELF
  27. return instance;
  28. }
  29. int main() {
  30. shared_ptr<C> pobject(new A);
  31. dynamic_pointer_cast<A>(pobject)->myvar=27; // just for verification
  32. B instance = pobject->mymethod();
  33. //std::cout << instance.pointer->myvar; //DOESN'T COMPILE: CANNOT DUMP !!
  34. std::cout << dynamic_pointer_cast<A>(instance.pointer)->myvar<<endl;
  35. cout<< instance.pointer.use_count()<<endl;
  36. return 0;
  37. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
27
2