未调用重载的赋值运算符

时间:2010-08-02 10:25:32

标签: c++ assignment-operator

我编写了一个复制所有变量值的类perform的重载赋值运算符。 例如:在Exp.cpp

class perform
{
    LOG *ptr;
int a;
//constructor
//destructor
perform operator=(const perform & rhs){

   ptr = rhs.ptr; a=rhs.s;
return * this;}
};

在另一个班级output中,我已经为abc声明了一个指针。

perform * ptr = StatCol::CreateCol(frm);
abc = ptr; //this line should invoke assignment overloaded.
           //but in my case it's not invoked.

4 个答案:

答案 0 :(得分:9)

假设abc是一个Perform对象,你需要取消引用你指定的指针:

abc = * ptr;

如果abc本身是一个指针,那么你不能做你想要的 - 你不能在LHS是一个指针的地方重载赋值。您必须取消引用两个指针:

* abc = * ptr;

答案 1 :(得分:0)

此外,通过引用返回更安全,从而避免调用复制构造函数。

    const perform& operator=(const perform & rhs){

     if (this != &rhs)
     {
       ptr = rhs.ptr; a=rhs.s;
     }
     return * this;
   }

答案 2 :(得分:0)

Custom assignment operator works only with user defined types so do like this:

perform p1,p2; 
p1 = p2;
perform *p = &p2;
p1 = *p;  


You can't override assignment of built in types(int , char etc.).

perform *p1,*p2; 
p1 = p2;

It simply copies the address of p2 to p1.

答案 3 :(得分:0)

在示例代码中,您正在分配指针,因此在不取消引用指针的情况下,您无法调用赋值运算符。

使用这种设计,进行浅拷贝的风险很大。此外,C ++赋值运算符签名是:'perform& operator =(...)'如标准中所述。它必须返回对同一对象的引用,以便编译器按照您的预期进行考虑。

more about assignment operator...