【发布时间】:2017-05-31 10:56:51
【问题描述】:
我在使用 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 打印正常,第二个给我一个段错误。我尝试在cppreference 上查看std::weak_ptr 和std::shared_ptr 的页面,但我仍然不明白为什么会发生这种情况。必须创建一个临时对象让我觉得很麻烦,这是在 C++14 中已经解决的问题还是我没有看到的东西?
谢谢!
【问题讨论】:
标签: c++11 weak-ptr make-shared