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.

¿`new` asigna suficiente memoria para cualquier instancia?

Si creo un Foo con

Foo* foo = new Foo();

y luego reasigno ese foo

Foo mkfoo();
*foo = mkfoo();

¿Puedo estar seguro de que he asignado suficiente memoria para esta nueva instancia creada por mkfoo? Incluso si Foo tiene contenidos de tamaño dinámico, como por ejemplo un std::vector que tiene diferentes contenidos cuando se crea con mkfoo() que cuando se crea con new Foo()? Si no es así, ¿cuál es la mejor manera de asignar la memoria?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    No, no podemos asegurarnos de haber asignado suficiente memoria para la nueva instancia creada por mkfoo ya que mkfoo podría crear un objeto Foo con un tamaño de memoria asignada dinámicamente diferente al que previamente asignamos usando new Foo(). La mejor manera de asignar la memoria sería crear un nuevo objeto Foo usando el operador new y luego copiar el contenido de mkfoo usando un constructor de copia o un operador de asignación. Esto asegura que se asigna la cantidad apropiada de memoria para la nueva instancia de Foo y que su contenido coincide con el de mkfoo. Por ejemplo,

    Foo* foo = new Foo();
    Foo mkfoo();
    
    // Asignar una nueva instancia de Foo con suficiente memoria para contener el contenido de mkfoo
    Foo* newFoo = new Foo(mkfoo);
    
    // Copiar el contenido de la instancia newFoo a la antigua instancia foo
    *foo = *newFoo;
    
    // Liberar la memoria asociada a la instancia temporal newFoo
    delete newFoo;
    

Comments are closed.