【发布时间】:2019-11-16 07:10:06
【问题描述】:
我有以下代码:
#include <iostream>
using namespace std;
class A{
int x;
public:
A(int x =1) : x(x) {cout << "A() ";}
A(const A& a) {x =a.x; cout << "A(const A&) ";}
A& operator=(const A& a){cout << "op= "; x=a.x; return *this;}
~A(){cout << "~A()";}
int getX() {return x;}
void setX(int x){this->x = x;}
};
A g(A a){
//a = 2;
cout << "g() ";
a.setX(3);
return a;
}
int main()
{
A a;
a = 2;
}
我希望有以下输出:A() op= ~A(),但输出却是A() A() op= ~A() ~A()。当我将值2 分配给对象a 时,似乎调用了构造函数和析构函数。为什么叫这两个?编译器是否有效地创建了一个具有x = 2 的新A 对象,然后使用赋值运算符将值赋给a?
【问题讨论】:
-
是的。 (您没有接受
int的赋值运算符)。 -
因为类没有赋值运算符,所以创建了类的临时实例,然后复制分配给现有对象,然后销毁。
-
是的,添加了另一个 int 赋值运算符 A& operator=(const int n){cout
-
顺便说一句:您的编码风格无处不在。您将函数体的花括号放在三个不同的位置。
){、) {和)\n{。选一个。请问? -
哦,我通常使用一种样式,但是这段代码的一半是已经编写好的示例,另一半是我的代码。
标签: c++ constructor destructor assignment-operator