我使用std::weak_ptr
和std::make_shared
时偶然发现这种行为,我觉得这一点都不奇怪。我正在使用C++ 11。的std :: weak_ptr的分配使用的std :: make_shared
#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
打印好,第二个给我一个段错误。我试图寻找在std::weak_ptr
和std::shared_ptr
上cppreference的页面,但我还是不明白为什么会这样。不得不创建一个临时对象让我觉得很麻烦,这是在C++ 14中解决的问题,还是我没有看到的东西?
谢谢!