La réponse courte est oui. Toute fonction peut être déclarée en ligne, et mettre le corps de la fonction dans la définition de la classe est une façon de le faire. Vous auriez également pu faire :
class Foo
{
int* p;
public:
Foo();
~Foo();
};
inline Foo::Foo()
{
p = new char[0x00100000];
}
inline Foo::~Foo()
{
delete [] p;
}
Cependant, c'est au compilateur de décider s'il met effectivement la fonction en ligne. VC++ ignore à peu près tout de vos demandes de mise en ligne. Il ne mettra en ligne une fonction que s'il pense que c'est une bonne idée. Les versions récentes du compilateur mettront également en ligne des éléments qui se trouvent dans des fichiers .obj séparés et qui ne sont pas déclarés en ligne (par exemple, du code dans différents fichiers .cpp) si vous utilisez génération du code temporel de la liaison .
Vous pourriez utiliser le __forceinline pour indiquer au compilateur que vous êtes vraiment sérieux lorsque vous dites "inline cette fonction", mais cela ne vaut généralement pas la peine. Dans de nombreux cas, le compilateur est vraiment le mieux placé pour savoir.