#include <iostream>
#include <string>
class Air
{
public:
Air(std::string name="") :m_name(name) {
std::cout << "Default ctor" << std::endl; // 有默認值是default constructor
}
Air(const Air &air) {
m_name = air.m_name;
std::cout << "copy ctor" << std::endl;
}
Air &operator=(const Air & air) {
m_name = air.m_name;
std::cout << "copy assign operator" << std::endl;
return *this;
}
~Air() {
std::cout << "dtor" << std::endl;
}
private:
std::string m_name;
};
/* copy constructor 和 copy assignment很好區分
如果一個新的對象被定義,一定會有個構造函數被調用,不可能調用賦值操作;
如果沒有新對象被定義,就不會有構造函數被調用,那麼當然就是賦值操作被調用 */
int main() {
Air a; // 定義新對象,調用default constructor
Air b = a; // 定義新對象,調用copy constructor
Air c(a); // 定義新對象,調用copy constructor
b = c; // 給已有對象賦值,調用copy assignment
return 0;
}
copy constructor 和 copy assignment很好區分
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.