Краткий ответ - да. Любая функция может быть объявлена встроенной, и размещение тела функции в определении класса является одним из способов сделать это. Вы могли бы также сделать:
class Foo
{
int* p;
public:
Foo();
~Foo();
};
inline Foo::Foo()
{
p = new char[0x00100000];
}
inline Foo::~Foo()
{
delete [] p;
}
Однако, это зависит от компилятора, если он действительно встроил функцию. VC ++ в значительной степени игнорирует ваши запросы на встраивание. Функция будет встроена только в том случае, если она считает, что это хорошая идея. В последних версиях компилятора также будут встроены элементы, которые находятся в отдельных файлах .obj и не объявлены как встроенные (например, из кода в разных файлах .cpp), если вы используете генерация временного кода ссылки .
Вы можете использовать ключевое слово __ forceinline , чтобы сказать компилятору, что вы действительно имеете это в виду, когда говорите «встроить эту функцию», но обычно это того не стоит. Во многих случаях компилятор действительно знает лучше.