为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
小怪兽爱吃肉 2019-08-09 17:48:41
赋值运算符和复制构造函数之间有什么区别?我不明白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

您可以使用默认构造和赋值替换复制构造,但效率会降低。

(作为旁注:我上面的实现正是编译器免费授予你的那些实现,因此手动实现它们没有多大意义。如果你有这两个中的一个,那么很可能是你手动管理一些资源。在这种情况下,还需要另一个加上析构函数。)


查看完整回答
反对 回复 2019-08-09
?
慕工程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?

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


查看完整回答
反对 回复 2019-08-09
?
跃然一笑

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;}};


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 638 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信