sobrecarga do operador de atribuição ignorada / não está acontecendo
Estou tentando criar uma biblioteca para algum trabalho e estou usando sobrecarga de operador para operação de atribuição. Suponha que X e Y são duas instâncias da classe que = sobrecarregaram assim:
A& A::operator=(A &rhs)
{
A::assign(*this, rhs);
return *this;
}
Quando eu faço isso:
A z;
z = x + y; // x and y are other instances of class A
está tudo bem, no entanto, quando eu faço um `
A p = q + r;
a rotina sobrecarregada não é chamada. Não tenho muita experiência com sobrecarga de operador, alguém pode explicar o que está acontecendo? Uma explicação pode ser que p seja apenas um alias para o objeto q + r criado já; no entanto, z cria uma nova instância da classe A e, portanto, a sobrecarga do operador entra em ação quando z é atribuído. Mais ou menos como:
#include <iostream>
using namespace std;
class X
{
public:
X();
};
X::X()
{
cout<<"called"<<endl;
}
int main(int argc, char *argv[])
{
X e; X f;
X g = e;
}
onde chamado é impresso apenas duas vezes, uma vez para eef, e não é impresso para g.
Se for esse o caso, alguém pode sugerir uma maneira de disparar a sobrecarga do operador para p.
Obrigado.