賦值運算符和復制構造函數之間有什么區別?我不明白C ++中賦值構造函數和復制構造函數之間的區別。它是這樣的:class A {public: A() { cout << "A::A()" << endl; }};// The copy constructorA a = b;// The assignment constructorA c;c = a;// Is it right?我想知道如何分配賦值構造函數和復制構造函數的內存?
3 回答
長風秋雁
TA貢獻1757條經驗 獲得超7個贊
一個拷貝構造函數用于初始化一個先前未初始化從其他對象的數據對象。
A(const A& rhs) : data_(rhs.data_) {}例如:
A aa;A a = aa; //copy constructor
一個賦值運算符是用來替換的數據之前初始化一些其他對象的數據對象。
A& operator=(const A& rhs) {data_ = rhs.data_; return *this;}例如:
A aa;A a;a = aa; // assignment operator
您可以使用默認構造和賦值替換復制構造,但效率會降低。
(作為旁注:我上面的實現正是編譯器免費授予你的那些實現,因此手動實現它們沒有多大意義。如果你有這兩個中的一個,那么很可能是你手動管理一些資源。在這種情況下,還需要另一個加上析構函數。)
慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
我不明白C ++中賦值構造函數和復制構造函數之間的區別。它是這樣的:
class A {
public:
A() {
cout << "A::A()" << endl;
}
};
// The copy constructor
A a = b;
// The assignment constructor
A c;
c = a;
// Is it right?
我想知道如何分配賦值構造函數和復制構造函數的內存?
躍然一笑
TA貢獻1826條經驗 獲得超6個贊
第一個是復制初始化,第二個是賦值。沒有賦值構造函數這樣的東西。
A aa=bb;
使用編譯器生成的復制構造函數。
A cc;cc=aa;
使用默認構造函數構造cc,然后在operator =已存在的對象上使用*賦值運算符**()。
我想知道如何分配賦值構造函數和復制構造函數的內存?
IDK在這種情況下分配內存是什么意思,但是如果你想看看會發生什么,你可以:
class A{public :
A(){ cout<<"default constructor"<<endl;};
A(const A& other){ cout<<"copy constructor"<<endl;};
A& operator = (const A& other){cout <<"assignment operator"<<endl;}};- 3 回答
- 0 關注
- 696 瀏覽
添加回答
舉報
0/150
提交
取消
