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.

questionAnswers(3)

yourAnswerToTheQuestion