fork(1) download
  1. #include <iostream>
  2. #include <memory>
  3. using namespace std;
  4.  
  5. class B; // <=== forward declare
  6. class C {
  7. public:
  8. virtual B mymethod() const =0;
  9. };
  10.  
  11. class A : public C {
  12. public:
  13. B mymethod() const override;
  14. //private:
  15. int myvar;
  16. };
  17.  
  18. struct B {
  19. std::shared_ptr<C> pointer;
  20. };
  21.  
  22. B A::mymethod() const {
  23. B instance;
  24. instance.pointer = std::make_shared<A>(*this); //is this wrong?
  25. return instance;
  26. }
  27. int main() {
  28. A object;
  29. object.myvar=27;
  30. B instance = object.mymethod();
  31. //std::cout << instance.pointer->myvar; //DOESN'T COMPILE: CANNOT DUMP !!
  32. std::cout << dynamic_pointer_cast<A>(instance.pointer)->myvar<<endl;
  33. cout<< instance.pointer.use_count()<<endl;
  34. return 0;
  35. }
Success #stdin #stdout 0s 3416KB
stdin
Standard input is empty
stdout
27
1