¿`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?
davy.ai
No, no podemos asegurarnos de haber asignado suficiente memoria para la nueva instancia creada por
mkfoo
ya quemkfoo
podría crear un objetoFoo
con un tamaño de memoria asignada dinámicamente diferente al que previamente asignamos usandonew Foo()
. La mejor manera de asignar la memoria sería crear un nuevo objetoFoo
usando el operadornew
y luego copiar el contenido demkfoo
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 deFoo
y que su contenido coincide con el demkfoo
. Por ejemplo,