Não sei se esse é o comportamento pretendido ou não (se for, desculpe, apenas feche este problema), mas isso claramente não deveria ser permitido!
Deixe-nos dizer,
1) Quero que a variável foo
tenha o valor 1 por padrão,
2) e muda seu valor quando o usuário interage de alguma forma (digamos, entrada).
3) Depois que o usuário terminar, o valor de foo
deve ter o valor 1 novamente.
O que acontece aqui é que as funções associadas a setget
são chamadas sempre que o valor é definido como 1 quando já é 1, deve ser chamada uma vez (a primeira vez) quando o valor original for diferente. Isso está matando um pouco o desempenho para mim, eu sei que posso fazer isso:
if (new_value == old_value):
return
Mas isso deve ser feito automaticamente.
Não acho uma boa ideia fazer isso automaticamente. Definir uma variável com o mesmo valor que já possui não deve afetar o desempenho, isso é algo que sua função setget
deve tratar, se necessário. Além disso, adicionar uma verificação de valor _will_ afeta o desempenho, uma vez que é uma ramificação nova (conceitualmente desnecessária).
Eu também não acho que podemos simplesmente supor que a configuração do mesmo valor não terá impacto no configurador e, portanto, pode ser ignorado.
Isso parece que você tem um configurador muito complicado, se a configuração de um valor a cada vez pode afetar o desempenho.
Bem, normalmente, quando você apenas faz a auto-atribuição, não seria um problema, mas se você fizer mais trabalho do que atribuir um novo valor, como o que é "setget", isso prejudicará o desempenho. Especialmente se o valor permanecer inalterado e autoatribuído a cada quadro.
Além disso, todos os compiladores C ++ (que eu conheço) protegem você contra tais atrocidades. (Pelo menos para tipos básicos, sobrecarregando o operador de atribuição, você está anulando essa proteção) Na verdade, eu vi alguns códigos de verificação verificando se o valor permanece o mesmo após a auto-atribuição para números flutuantes no amd cpus. Isso foi feito como verificação de integridade para algum projeto. Esqueci como era chamado.
não vale a pena quebrar o código antigo, na minha opinião, quando há uma solução simples (tenho um código que utiliza o setter para exibir uma notificação ao usuário para as mesmas tentativas de atribuição de valor).
Comentários muito úteis
não vale a pena quebrar o código antigo, na minha opinião, quando há uma solução simples (tenho um código que utiliza o setter para exibir uma notificação ao usuário para as mesmas tentativas de atribuição de valor).