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

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

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

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

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

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

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

c++

constructor

destructor

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

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