fork download
  1. #include <iostream>
  2. #include <memory>
  3. #include <string>
  4.  
  5. struct B {
  6. std::string s;
  7. };
  8. struct A {
  9. B b;
  10. A(std::string s) : b{s} {};
  11. ~A() { std::cout << "A deleted." << std::endl; }
  12. };
  13.  
  14. void f(std::shared_ptr<B> b) {
  15. std::cout << "in f, b->s = " << b->s << " (use_count=" << b.use_count() << ")"
  16. << std::endl;
  17. }
  18.  
  19. int main() {
  20. std::shared_ptr<A> a = std::make_shared<A>("hello");
  21. std::shared_ptr<B> b { a, &(a->b) };
  22. a.reset(); // a now invalid.
  23. std::cout << "before f, b->s = " << b->s << " (use_count=" << b.use_count()
  24. << ")" << std::endl;
  25. f(std::move(b)); // f now responsible for deleting the A.
  26. std::cout << "after f" << std::endl;
  27. return 0;
  28. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
before f, b->s = hello (use_count=1)
in f, b->s = hello (use_count=1)
A deleted.
after f