我使用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中解決的問題,還是我沒有看到的東西?
謝謝!