我偶然发现了这种行为当使用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;
}
Run Code Online (Sandbox Code Playgroud)
第一次std::cout打印很好,第二次给我一个段错误.我试着看的网页std::weak_ptr,并std::shared_ptr在cppreference,但我还是不明白为什么会这样.必须创建一个临时对象对我来说感觉很麻烦,这是在C++ 14中解决的问题还是我没有看到的东西?
谢谢!