В C++ конструктор и деструктор могут быть встроенными функциями?

Короткий ответ — да. Любая destructor функция может быть объявлена cxx ​​встроенной, и помещение constructors тела функции в определение constructor класса — один из способов constructors сделать это. Вы также могли constructors бы сделать:

class Foo 
{
    int* p;
public:
    Foo();
    ~Foo();
};

inline Foo::Foo() 
{ 
    p = new char[0x00100000]; 
}

inline Foo::~Foo()
{ 
    delete [] p; 
}

Однако от компилятора ctor зависит, действительно ли c++ он встраивает функцию. VC++ в c++ значительной степени игнорирует constructor ваши запросы на встраивание. Он ctor будет встраивать функцию cpp только в том случае, если c++ сочтет это хорошей идеей. Последние constructor версии компилятора также destructors будут встраивать вещи, которые ctor находятся в отдельных файлах cxx .obj и не объявлены встроенными c++ (например, из кода в разных constructors файлах .cpp), если вы используете cpp link time code generation.

Вы можете использовать ключевое ctor слово __forceinline, чтобы сообщить компилятору, что destructor вы действительно имеете в ctor виду это, когда говорите c++ «встроить эту функцию», но destructors обычно это того не стоит. Во constructors многих случаях компилятор c++ действительно знает лучше.

c++

constructor

destructor

2022-11-10T11:26:37+00:00
Вопросы с похожей тематикой, как у вопроса:

В C++ конструктор и деструктор могут быть встроенными функциями?