猿问

赋值运算符和复制构造函数之间有什么区别?

赋值运算符和复制构造函数之间有什么区别?

我不明白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?

我想知道如何分配赋值构造函数和复制构造函数的内存?


小怪兽爱吃肉
浏览 639回答 3
3回答

长风秋雁

一个拷贝构造函数用于初始化一个先前未初始化从其他对象的数据对象。A(const&nbsp;A&&nbsp;rhs)&nbsp;:&nbsp;data_(rhs.data_)&nbsp;{}例如:A&nbsp;aa;A&nbsp;a&nbsp;=&nbsp;aa;&nbsp;&nbsp;//copy&nbsp;constructor一个赋值运算符是用来替换的数据之前初始化一些其他对象的数据对象。A&&nbsp;operator=(const&nbsp;A&&nbsp;rhs)&nbsp;{data_&nbsp;=&nbsp;rhs.data_;&nbsp;return&nbsp;*this;}例如:A&nbsp;aa;A&nbsp;a;a&nbsp;=&nbsp;aa;&nbsp;&nbsp;//&nbsp;assignment&nbsp;operator您可以使用默认构造和赋值替换复制构造,但效率会降低。(作为旁注:我上面的实现正是编译器免费授予你的那些实现,因此手动实现它们没有多大意义。如果你有这两个中的一个,那么很可能是你手动管理一些资源。在这种情况下,还需要另一个加上析构函数。)

慕工程0101907

我不明白C ++中赋值构造函数和复制构造函数之间的区别。它是这样的:class A {public:&nbsp; &nbsp; A() {&nbsp; &nbsp; &nbsp; &nbsp; cout << "A::A()" << endl;&nbsp; &nbsp; }};// The copy constructorA a = b;// The assignment constructorA c;c = a;// Is it right?我想知道如何分配赋值构造函数和复制构造函数的内存?

跃然一笑

第一个是复制初始化,第二个是赋值。没有赋值构造函数这样的东西。A&nbsp;aa=bb;使用编译器生成的复制构造函数。A&nbsp;cc;cc=aa;使用默认构造函数构造cc,然后在operator =已存在的对象上使用*赋值运算符**()。我想知道如何分配赋值构造函数和复制构造函数的内存?IDK在这种情况下分配内存是什么意思,但是如果你想看看会发生什么,你可以:class&nbsp;A{public&nbsp;: &nbsp;&nbsp;&nbsp;&nbsp;A(){&nbsp;cout<<"default&nbsp;constructor"<<endl;}; &nbsp;&nbsp;&nbsp;&nbsp;A(const&nbsp;A&&nbsp;other){&nbsp;cout<<"copy&nbsp;constructor"<<endl;}; &nbsp;&nbsp;&nbsp;&nbsp;A&&nbsp;operator&nbsp;=&nbsp;(const&nbsp;A&&nbsp;other){cout&nbsp;<<"assignment&nbsp;operator"<<endl;}};
随时随地看视频慕课网APP
我要回答