#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很好区分
最新推荐文章于 2022-07-26 08:05:33 发布