为什么“ weak.lock()”返回“ nullptr”,其定义为“自动弱= std :: make_shared (42);”?

问题描述 投票:0回答:1

为什么weak.lock()在这段代码中最简短地返回nullptr

   std::weak_ptr<int> weakPtr1 = std::make_shared<int>(6);
   std::cout << weakPtr1.lock() << std::endl;

而它在下一个中起作用:

   std::shared_ptr<int> sharedPtr = std::make_shared<int>(99);
   std::weak_ptr<int> weakPtr2 = sharedPtr;
   std::cout << weakPtr2.lock() << std::endl;

检查cpp.sh/9gkys。

我已经考虑过,但是现在我还是很困惑。谢谢您对此问题的帮助。

c++ smart-pointers
1个回答
2
投票

您的示例使用副本初始化。因此,在右侧构造的shared_ptr仅在对表达式求值之前有效,然后销毁:

© www.soinside.com 2019 - 2024. All rights reserved.