beginner_intermediate

Construtor e Operador =

Constructors e operador =

É bem comum que as pessoas não entendam e nem saibam a razão de existir o copy/move constructor e assignment operator.
Por padrão, classes no C++ são do tipo value_type. Isso faz com que ao atribuir algo a uma variável de classe, uma cópia de ponteiros não possa ser feita pela classe estar localizada na stack.
O operador de cópia e movimentação faz com que não sejam gastos ciclos desnecessários pelo programa.

Exemplo comentado:

Constructors e assignment operator

Agora segue a execução.
Repare que o assignment operator não está sendo chamado para as variáveis abaixo, por estarem todos sendo construídos agora.

Já neste segundo bloco, os objetos que receberam a atribuição são pré-existentes. Não há de se chamar um construtor em um objeto já construído, certo?
Desta forma, o operador = é invocado para que os valores sejam copiados para dentro do objeto à esquerda.

No terceiro e último bloco, o objeto TestCopy<>(99) existe apenas no escopo interno do push_back. Isso faz com que o Move constructor seja invocado.

Final do código comentado ================

Regra simples para diferenciar:
Se objeto não existe ainda => Constructor
Se objeto já existe => Operator

Código: https://github.com/SimplyCpp/exemplos/blob/master/constructor.cpp

Leave a Reply

Your email address will not be published. Required fields are marked *