赋值运算符和复制构造函数之间有什么区别?我不明白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 关注
- 638 浏览
添加回答
举报
0/150
提交
取消