Я предполагаю, что это довольно просто, но я не смог найти здесь никакого источника.
Производный класс содержит информацию об инициализации, которую необходимо передать базовому классу. В данном случае это резерв памяти.
class Derived: public Base
{
private:
const unsigned short memorySize= 100;
public:
inline Derived() : Base(memorySize) {}
void DoStuff();
};
Это с треском проваливается. Я ожидаю, что базовый конструктор вызывается перед производным конструктором, а memorySize назначается только при вызове производного конструктора.
#define memorySize 100
class Derived: public Base
{
private:
public:
inline Derived() : Base(memorySize) {}
void DoStuff();
};
Это работает, как ожидалось.
Мои вопросы: Я предполагаю, что memorySize в первом примере еще не был инициализирован во время вызова базового конструктора, или здесь происходит что-то еще?
Я узнал, что #define для констант нежелательно в C ++, и очень предпочтительно использовать значения const. Является ли это исключением из этого правила или есть более правильный способ справиться с этой ситуацией?
memorySize
не инициализируется при передаче конструкторуBase
. - person Yksisarvinen   schedule 19.11.2019