比较自我指派的指针

时间:2010-10-20 05:45:08

标签: c++ pointers

我试图在一个名为Set的简单C ++类上重载=运算符,该类包含一个动态的int数组。对于=运算符,我首先要检查自我赋值,所以我想比较2个指针以查看它们是否具有相同的内存地址。这是代码:

Set& Set::operator=(const Set& setEqual)
{
//first check for self assignment
if(setEqual == this*)
    cout << "this is self assignment";
}

错误吐出是error: expected primary-expression before ')' token

我相信我再次对指针产生了误解,所以如果有人能指出(哈!)我朝着正确的方向发展,我会很感激。

3 个答案:

答案 0 :(得分:6)

错误是因为this*无效 - *是中缀(乘法)或前缀(取消引用指针)。

您可能希望 &setEqual == this - 从同一内存地址或setEqual==*this的对象分配 - 使用您定义的任何operator==比较相等性< / p>

答案 1 :(得分:4)

如果你想比较指向的东西的地址,你真的想要这个:

Set& Set::operator=(const Set& setEqual)
{
//first check for self assignment
if(&setEqual == this)
    cout << "this is self assignment";
}

使用某些解决方案提取的(setEqual==*this)来比较operator==下的对象是否相等。

答案 2 :(得分:4)

要检测您需要的自我分配

if(&setEqual == this)

你永远不应该使用

if(setEqual == *this)

用于检测自我赋值,因为后一个语句将调用对象的比较,这些对象可能会以您不期望的方式重载,也可能更慢。