小编ant*_*ert的帖子

使用std :: make_shared进行std :: weak_ptr赋值

我偶然发现了这种行为当使用std::weak_ptrstd::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_ptrcppreference,但我还是不明白为什么会这样.必须创建一个临时对象对我来说感觉很麻烦,这是在C++ 14中解决的问题还是我没有看到的东西?

谢谢!

weak-ptr make-shared c++11

3
推荐指数
1
解决办法
972
查看次数

标签 统计

c++11 ×1

make-shared ×1

weak-ptr ×1