fork download
  1. #include <set>
  2. #include <iostream>
  3. class Foo{
  4. public:
  5. class Inner{
  6. public:
  7. Inner(Foo *foo){
  8. outer = foo;
  9. foo->addRef(this);
  10. }
  11. Foo *outer;
  12. void outerDeleted(){
  13. outer = nullptr;
  14. }
  15. };
  16. std::set<Inner*> inners;
  17. void addRef(Inner *inner){
  18. inners.insert(inner);
  19. }
  20. ~Foo(){
  21. for(auto in : inners){
  22. in->outerDeleted();
  23. }
  24. }
  25.  
  26.  
  27. };
  28.  
  29. int main(){
  30. Foo *f = new Foo();
  31. Foo::Inner *i = new Foo::Inner(f);
  32. std::cout << f << std::endl;
  33. std::cout << i->outer << std::endl;
  34. delete f;
  35. std::cout << i->outer << std::endl;
  36. }
Success #stdin #stdout 0s 3028KB
stdin
Standard input is empty
stdout
0x8d18008
0x8d18008
0