看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《snoopy0907 (我是男的喔~^0^")》之銘言: : 不好意思 : 也許問題對大家有點簡單 : 但是我一直還是搞不太清楚 : 就是C++ Primer裡有提到拷貝控制項的問題 : 那請問copy建構式 和 重載assignment運算子 : 兩個到底有什麼差別啊? : 一直搞不太清楚...好像做的事情都一樣 : 最後都是左邊運算元的值都是右邊的值 : 我就不懂為什麼要這樣區分 : 觀念亂亂的 : 能請前輩們指點一下嗎?謝謝~ copy construct 是建構子 所以是從零開始建構物件,不過他有一個拷貝來源可以參考 assignment operator 則是已經建構好的物件,所以資料成員已經被初始化過了。 舉個例子: class A { char *data; public: A(): data(new char[1024]) {} // copy construct A(A const & cp) : data(new char[1024]) { //^^^^^^^^^^^^^^^^^^^^ std::copy(cp.data, cp.data+1024, data); } // assignment operator A& operator = (A const &cp) { // data 已經被初始化 std::copy(cp.data, cp.data+1024, data); } }; 注意在使用物件的時候 A a; A b=a; // 使用 copy constructor A c; c=a; // 使用 assignment operator 對新手來說最重要的是當你的資料成員裡面有 pointer 的時候,大部分時候就是要寫 copy 跟 assignment operator。除非你刻意讓 pointer 指向同一物件。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.24.51
adxis:補充:不能在 cp ctor 的 init list 中使用 default ctor 01/07 10:32
snoopy0907:看了這個例子就明白了~感激不盡..謝謝:) 01/07 10:51