我重载了运算符“ =”以做某事,但实际上它使用了构造函数
class Date
{public:
int x;
public:
Date(int v1)
{
x = v1+1;
}
Date& operator=(Date& d)
{
x = x - 1;
}
public:
~Date() {};
};
int main()
{
Date d = 1;
cout << d.x;
//delete d;
return 0;
}
我原本希望打印0,但是打印2(使用构造函数)。这是为什么?还有为什么不让我删除d?它说它必须是指向完整对象类型的指针。
答案 0 :(得分:6)
应该优先,因为这
Date d = 1;
不是赋值,它是带有初始化的对象声明。 C ++中类对象的初始化是构造函数的领域。不要让语法(使用= 1
作为初始化程序)使您感到困惑。
要调用赋值运算符,左侧必须是已发生初始化的现有对象。分配仅适用于预先存在的对象。因此,如果您添加这样的语句:
d = 1;
它可以按您期望的方式调用赋值运算符(在修复了一些其他错误之后)。
为什么不让我删除d?它说它必须是指向完整对象类型的指针。
该错误对我来说似乎很容易解释。您只能在指针操作数上调用delete。并且指针必须指向先前使用new
创建的对象。