¿Es seguro hacer algo como esto? No estoy seguro de si la orden de ejecución está garantizada o no.

auto foo = std::make_unique<Foo>();
foo->Bar(std::move(foo));
0
kanslulz 16 oct. 2018 a las 17:41

2 respuestas

La mejor respuesta

Funcionará bien

La secuencia:

  1. Evalúe std::move(foo) luego evalúe foo-> (o al revés, lo cual no importa ya que tampoco cambia el estado del puntero foo).
  2. Invoque Foo::Bar(...) en el objeto de destino obtenido en el n. ° 1 pasando el foo de rvalue-casted también obtenido en el n. ° 1.

Probablemente no sea el estilo de código más limpio.

1
bobah 16 oct. 2018 a las 15:00

¿Es seguro hacer algo como esto?

No se recomienda que funcione como espera el estilo porque el objeto foo todavía está disponible después de que se haya movido. Eso crea un riesgo de errores causados por acceder a un objeto movido.

0
Maxim Egorushkin 16 oct. 2018 a las 14:58