您好,登錄后才能下訂單哦!
拷貝構造函數發生在對象還沒有創建,需要創建時
如: MyClass obj1(1);
MyClassobj3 = obj1;
賦值操作符重載僅發生在對象已經執行過構造函數,即已經創建的情況下
如:
MyClass obj1(1);
MyClass obj3;
obj3 = obj1;
具體代碼如下:
class MyClass
{
public:
MyClass( int i = 0)
{
cout << i;
}
MyClass( const MyClass &x)
{
cout << 2;
}
MyClass &operator=(const MyClass & x)
{
cout << 3;
return *this ;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1);
MyClass obj2(2);
MyClass obj3;
obj3 = obj1;
return 0;
}
輸出:1203444
先創建對象obj1,調用構造函數并初始化為1,輸出1
再創建對象obj2,調用構造函數并初始化為2,輸出2
創建對象obj3,調用構造函數,使用默認值為0,輸出0
obj1賦值給obj3時,調用賦值函數,輸出3
再依次析構,析構的順序和調用構造的順序相反
先析構obj3,在析構obj2,最后析構obj1
class MyClass
{
public:
MyClass( int i = 0)
{
cout << i;
}
MyClass( const MyClass &x)
{
cout << 2;
}
MyClass &operator=(const MyClass & x)
{
cout << 3;
return *this ;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1);
MyClass obj2(2);
MyClass obj3 = obj1;
return 0;
}
輸出:122444
依次創建對象obj1,obj2,調用兩次構造,分別輸出初始化的值1,2
MyClass obj3 = obj1;由于賦值的時候obj3還沒有創建,所以會調用拷貝構造函數,輸出2
再依次析構三個對象
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。