我在使用时偶然发现了这种行为std::weak_ptr
,std::make_shared
我发现它有点奇怪。我正在使用 C++11。
#include <iostream>
#include <memory>
int main()
{
std::weak_ptr<int> weak;
std::shared_ptr<int> shared {std::make_shared<int>(42)};
weak = shared;
std::cout << "Meaning of life: " << *weak.lock() << std::endl;
weak = std::make_shared<int>(23);
std::cout << "Meaning of life: " << *weak.lock() << std::endl;
return 0;
}
第一个std::cout
打印正常,第二个给我一个段错误。我尝试查看cppreferencestd::weak_ptr
的页面和std::shared_ptr
页面,但我仍然不明白为什么会发生这种情况。必须创建一个临时对象对我来说很麻烦,这是在 C++14 中已经解决的问题还是我没有看到的东西?
谢谢!