[討論] 有關C++Primer4/e中文版,p482

看板C_and_CPP (C/C++)作者 (....)時間13年前 (2013/03/22 23:15), 編輯推噓2(209)
留言11則, 2人參與, 最新討論串1/1
這是課文的內容(12是我自己加上) "1.如果copy constructor是private,用戶程式就不得拷貝該class的物件。 編譯器會抵制每一次拷貝企圖。 2. 然而friend和class本身成員仍可以進行拷貝動作。如果我們也想阻止二者 的拷貝動作,可宣告一個private copy constructor但不定義它。" 我如果已經宣告copy constructor為private, 要怎樣寫一個"成員函式"來拷貝? ex. class Foo { public: int x,y; private Foo(const Foo&); private Foo(Foo& ); public: ??????? }; 能夠幫我填空一下嗎? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.91.138

03/22 23:45, , 1F
public: Foo *create(Foo &src) { return new Foo(src); }
03/22 23:45, 1F

03/22 23:46, , 2F
不定義複製建構也沒意義,它不會在 compile time 報錯
03/22 23:46, 2F

03/22 23:47, , 3F
而且你自己規定不能用複製建構,又自己打破規定,只會被笑
03/22 23:47, 3F

03/23 00:57, , 4F
如果有地方用到就會報錯 像你用的這段應該就會
03/23 00:57, 4F

03/23 00:59, , 5F
通常會定一個CopyFrom的method 引數用指標或參考 手動把元
03/23 00:59, 5F

03/23 01:00, , 6F
素都複製過去 這是故意要以顯性方式呼叫 可能原因有兩個
03/23 01:00, 6F

03/23 01:02, , 7F
1.好追蹤除錯(coding style) 2.為了使用自定的記憶體管理架
03/23 01:02, 7F

03/23 01:03, , 8F
構(reference count+smart pointer)
03/23 01:03, 8F

03/23 01:05, , 9F
啊 報錯的時間是link的時候 怕誤會所以加註一下
03/23 01:05, 9F

03/23 10:56, , 10F
您對,上面我是把不定義當成 private: Foo(Foo &src) { }
03/23 10:56, 10F

03/23 10:56, , 11F
一時誤會,應該是整個函數不定義才對,所以會報錯
03/23 10:56, 11F
文章代碼(AID): #1HJ7MjCg (C_and_CPP)
文章代碼(AID): #1HJ7MjCg (C_and_CPP)