es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cambiará la eliminación del destructor la inicialización agregada en C++?

El código es el siguiente:

struct B {
    ~B() = delete;
};

B * b = new B{};
<code>
no se compila en la última versión de MSVC con el siguiente error:
</code>
error C2512: 'B': no está disponible un constructor por defecto apropiado
nota: Inicialización de agregado no válida

Al mismo tiempo, tanto GCC como Clang no ven ningún problema en el código, demo: https://gcc.godbolt.org/z/va9vcsEed

¿Es correcto asumir que es simplemente un error en MSVC?

En general, ¿la presencia o eliminación del destructor cambia alguna regla de la inicialización de agregado?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es posible que esto sea un error en MSVC, ya que GCC y Clang no tienen problemas para compilar el código.

    Sin embargo, según el estándar de C++, la presencia o eliminación de un destructor no cambia las reglas de inicialización de agregados. Un agregado aún puede ser inicializado con una lista de inicialización vacía.

    Por lo tanto, el código debería ser válido y capaz de compilar independientemente de si se elimina o no el destructor.

Comments are closed.