代碼在i7-4790處理器(x86-64)上的VC++ 2013(v120)下編譯時沒有問題。爲什麼商店原子unique_ptr導致崩潰?
int main()
{
std::atomic<std::unique_ptr<int>> p;
p.store(std::make_unique<int>(5));
}
一旦main()
回報,我得到一個崩潰:
表達:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)
這是怎麼回事?
代碼在i7-4790處理器(x86-64)上的VC++ 2013(v120)下編譯時沒有問題。爲什麼商店原子unique_ptr導致崩潰?
int main()
{
std::atomic<std::unique_ptr<int>> p;
p.store(std::make_unique<int>(5));
}
一旦main()
回報,我得到一個崩潰:
表達:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)
這是怎麼回事?
你不能用std::unique_ptr
實例化std::atomic
。 cppreference
的std ::原子可以與任何類型TriviallyCopyable T.性病被實例化::原子既不是可複製也不移動。
而一個std::unique_ptr
不TriviallyCopyable
類滿足MoveConstructible和MoveAssignable要求,但也不CopyConstructible或CopyAssignable的要求。
你可以使用一個std::shared_ptr
,它具有free functions defined to allow you to have atomic stores and loads
感謝您的回答。那麼我是否正確地認爲這裏的問題是VC++ 2013沒有針對'std :: atomic
我不認爲有任何要求它檢查'T'是否TriviallyCopyable – NathanOliver
@ user2296177我不認爲這是一個錯誤,因爲標準調用'T'必須* TriviallyCopyable *所以你的負擔是你給它一個正確的類型。 – NathanOliver
什麼編譯器和庫版本?什麼CPU架構? –
@BenVoigt VC++ 2013(v120)CPU:i7-4790處理器(x86-64) – user2296177