resueltos que poo objeto ejercicios ejemplo destructores constructores codigo clases c++ constructor destructor

que - En C++, ¿el constructor y el destructor pueden ser funciones en línea?



constructores y destructores c++ pdf (5)

Definir el cuerpo del constructor DENTRO de la clase tiene el mismo efecto de colocar la función FUERA de la clase con la palabra clave "en línea".

En ambos casos, es una pista para el compilador. Una función "en línea" no necesariamente significa que la función estará en línea. Eso depende de la complejidad de la función y otras reglas.

VC ++ realiza funciones que se implementan dentro de la declaración de clase funciones en línea.

Si declaro una clase Foo siguiente manera, ¿son las funciones en línea CONSTRUCTOR y DESTRUCTOR?

class Foo { int* p; public: Foo() { p = new char[0x00100000]; } ~Foo() { delete [] p; } }; { Foo f; (f); }


En la misma medida en que podemos hacer cualquier otra función en línea, sí.


La respuesta corta es sí. Cualquier función puede declararse en línea, y poner el cuerpo de la función en la definición de la clase es una forma de hacerlo. También podrías haber hecho:

class Foo { int* p; public: Foo(); ~Foo(); }; inline Foo::Foo() { p = new char[0x00100000]; } inline Foo::~Foo() { delete [] p; }

Sin embargo, depende del compilador si realmente lo hace alinear la función. VC ++ prácticamente ignora sus solicitudes de alineación. Solo alineará una función si cree que es una buena idea. Las versiones recientes del compilador también incluirán elementos que están en archivos .obj separados y no declarados en línea (por ejemplo, desde código en diferentes archivos .cpp) si usa la generación de código de tiempo de enlace .

Podría usar la palabra clave __forceinline para decirle al compilador que realmente quiere decir eso cuando diga "en línea esta función", pero por lo general no vale la pena. En muchos casos, el compilador realmente sabe mejor.


Para alinear o no es principalmente decidido por su compilador. Inline en el código solo insinúa al compilador.
Una regla con la que puede contar es que las funciones virtuales nunca estarán en línea. Si su clase base tiene un constructor / destructor virtual, el suyo probablemente nunca estará en línea.


Poner la definición de función en el cuerpo de la clase equivalente a marcar una función con la palabra clave en línea. Eso significa que la función puede o no estar indicada por el compilador. ¿Entonces supongo que la mejor respuesta sería "tal vez"?