Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未调用重载的赋值运算符_C++_Assignment Operator - Fatal编程技术网

C++ 未调用重载的赋值运算符

C++ 未调用重载的赋值运算符,c++,assignment-operator,C++,Assignment Operator,我已经编写了一个重载赋值运算符,用于复制所有变量值。 例如:在Exp.cpp中 class perform { LOG *ptr; int a; //constructor //destructor perform operator=(const perform & rhs){ ptr = rhs.ptr; a=rhs.s; return * this;} }; 在另一个类输出中,我为abc声明了一个指针 假设abc是一个执行对象,则需要取消对正在分配的指针的引用: a

我已经编写了一个重载赋值运算符,用于复制所有变量值。 例如:在Exp.cpp中

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

   ptr = rhs.ptr; a=rhs.s;
return * this;}
};
在另一个类输出中,我为abc声明了一个指针


假设abc是一个执行对象,则需要取消对正在分配的指针的引用:

abc = * ptr;
如果abc本身是一个指针,那么你就不能按你的要求去做——你不能在LHS是指针的地方重载赋值。您必须取消引用两个指针:

* abc = * ptr;

假设abc是一个执行对象,则需要取消对正在分配的指针的引用:

abc = * ptr;
如果abc本身是一个指针,那么你就不能按你的要求去做——你不能在LHS是指针的地方重载赋值。您必须取消引用两个指针:

* abc = * ptr;

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

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

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

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

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

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

在示例代码中,您正在分配指针,因此如果不取消对指针的引用,就不可能调用赋值运算符

使用这种设计,进行浅拷贝的风险是巨大的。此外,C++赋值操作符签名是:“执行和操作符=…”如本标准所述。它必须返回对同一对象的引用,以便编译器按照预期的方式考虑它。


.

在示例代码中,您正在分配指针,因此,如果不取消对指针的引用,就不可能调用赋值运算符

使用这种设计,进行浅拷贝的风险是巨大的。此外,C++赋值操作符签名是:“执行和操作符=…”如本标准所述。它必须返回对同一对象的引用,以便编译器按照预期的方式考虑它。



是的,我写的和aobve一样。但是没有人打电话。LHS是一个指针,也就是说abc是一个指针,我写的和aobve一样。但是没有人打电话。LHS是一个指针。例如,abc是一个指针,向我们显示您的实际代码,包括abc的声明。很难知道是什么错误导致了您的问题,以及您在这里重新键入代码时犯了什么错误。代码太大了。或者你问我相关的问题。我会告诉你与我的问题相关的问题。这里abc是Perform类型的指针。Wehter LHS可以是指针?向我们展示你的实际代码,包括abc的声明。很难知道是什么错误导致了您的问题,以及您在这里重新键入代码时犯了什么错误。代码太大了。或者你问我相关的问题。我会告诉你与我的问题相关的问题。这里abc是Perform类型的指针。Wehter LHS可以是指针?@Vishu照我说的做-取消引用两个指针-这将使用赋值运算符。请告诉我如何做?我不明白。我最后想要的是Perform类型的abcpointer应该包含复制的值。它必须是指针。我不能更改。在这种情况下,如何确保我的asigment运算符called@Vishnu我已经告诉你该怎么做了-我看我不能再清楚了。好吧,LHS不应该是指针,那么只有我的分段运算符被调用了,是吗?非常感谢。我将尝试并发表评论。谢谢sperform&operator=const perform&rhs;对不起,这是实际行,我错过了上面的参考符号。在这种情况下,LHS可以是指针?如果我错了,很抱歉。@Vishu照我说的做-取消引用两个指针-这将使用赋值运算符。请告诉我如何操作?我不明白。我最后想要的是Perform类型的abcpointer应该包含复制的值。它必须是指针。我不能更改。在这种情况下,如何确保我的asigment运算符called@Vishnu我已经告诉你该怎么做了-我看我不能再清楚了。好吧,LHS不应该是指针,那么只有我的分段运算符被调用了,是吗?非常感谢。我将尝试并发表评论。谢谢sperform&operator=const perform&rhs;对不起,这是实际行,我错过了上面的参考符号。在这种情况下,LHS可以是指针?如果我错了,很抱歉。标准对从不参与重载的返回类型没有要求。标准对从不参与重载的返回类型没有要求。