fork download
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. int main() {
  5. std::weak_ptr<int> q;
  6.  
  7. {
  8. std::shared_ptr<int> p = std::make_shared<int>(666);
  9. std::cout << p.get() << " = " << *p << " (" << p.use_count() << ", expect 1)\n";
  10. q = p;
  11. std::cout << p.get() << " = " << *p << " (" << p.use_count() << ", expect 1)\n";
  12. {
  13. std::shared_ptr<int> r = p;
  14. std::cout << p.get() << " = " << *p << " (" << p.use_count() << ", expect 2)\n";
  15. }
  16. std::cout << p.get() << " = " << *p << " (" << p.use_count() << ", expect 1)\n";
  17. }
  18. std::cout << "q is " << (q.expired() ? "expired, which is expected" : "NOT expired, which is unexpected\n");
  19.  
  20. return 0;
  21. }
Success #stdin #stdout 0.01s 5548KB
stdin
Standard input is empty
stdout
0x56350fd09e80 = 666 (1, expect 1)
0x56350fd09e80 = 666 (1, expect 1)
0x56350fd09e80 = 666 (2, expect 2)
0x56350fd09e80 = 666 (1, expect 1)
q is expired, which is expected