我在使用 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是否已经解决了这个问题,还是有什么我没有看到的东西?谢谢!