copy constructor 和 copy assignment很好區分

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章