我的印象是,在foo = bar和foo{ bar }兩個做同樣的事情,它只是一個偏好的問題,但在我的代碼foo = bar給出了一個錯誤,但foo{ bar }不會:
std::vector<std::unique_ptr<bar>> bars;
bar& myFunction() {
bar* b = new bar();
std::unique_ptr<bar> foo{ b }; //works fine
std::unique_ptr<bar> foo = b; //error
bars.emplace_back(std::move(foo));
return *b;
}
知道為什么會這樣嗎?
uj5u.com熱心網友回復:
第二個不起作用,因為unique_ptr有一個顯式建構式:
explicit unique_ptr( pointer p ) noexcept;
下面一行:
std::unique_ptr<bar> foo = b;
嘗試呼叫上述的建構式std::unique_ptr。并且由于explicit關鍵字,對建構式的呼叫是無效的。
所以只有這兩個會起作用:
std::unique_ptr<bar> foo { b };
std::unique_ptr<bar> foo ( b ); // or this
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/420586.html
標籤:
