作者adxis (acer)
看板C_and_CPP
標題Re: [問題] 一個觀念上的問題
時間Thu Jan 7 10:31:47 2010
※ 引述《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