我在閱讀an article關於有效使用auto_ptr
。在那裏,下面的代碼被認爲是正確的一段代碼:分配原始指針到auto_ptr
// Example 10(c): Correct (finally!)
//
auto_ptr<String> f()
{
auto_ptr<String> result = new String;
*result = "some value";
cout << "some output";
return result; // rely on transfer of ownership;
// this can't throw
}
但據我所知,中auto_ptr
賦值運算符只接受另一auto_ptr
作爲rhs
- 以避免意外的誤操作。那麼,下面這行是文章中的一個錯字,還是真的假裝工作?
auto_ptr<String> result = new String;
你是對的,+1。 – jogojapan
但是關於你對治療者(現在已刪除)答案的評論:當然這涉及拷貝構造函數。你的回答是正確的,爲什麼問題中說明的初始化不起作用。但是這是複製初始化也是正確的,它涉及拷貝構造函數。 (對拷貝構造函數的實際調用可能會被優化掉,但這是另一回事。) – jogojapan
@jogojapan:嗯,每天學習一些新東西。有什麼地方可以閱讀更多(比標準更少的法律語言)關於何時調用構造函數,這將解釋更多(在編譯器優化它們之前)? – Cornstalks