我(錯誤地)在我的程序如下分配: std::shared_ptr<SI::Program> m_program; // in class
m_program = std::make_unique<SI::Program>(); // in method
當我發現這一點,我首先想知道爲什麼這甚至編譯。原來shared_ptr有一個特殊的移動賦值操作符unique_ptr對象。 我的問題是,這
我有一個類,移動任務被明確刪除,因爲對象不應該是可移動的。但是,如果我分配到使用這個RVO類的一個實例,編譯器給我的錯誤: main.cpp:12:16: note: candidate function has been explicitly deleted
也編譯器提現有的拷貝賦值運算符,但不使用它。 這裏是我的代碼(或(不)運行例如here): class foo {
public:
下面的代碼提供了錯誤: use of deleted function ‘constexpr B::B(const B&)’
現在,我知道這是因爲拷貝構造函數是(故意)通過指定移動構造函數隱式刪除,並且複製該向量導致對(已刪除的)複製構造函數的調用。我想我也明白爲什麼使用vector的拷貝構造函數和賦值操作符。我清楚地想要使用移動構造函數和賦值運算符:移動對象,所以也移動它包含的矢量。那麼,如