C++将派生类的const值传递给基意外行为的构造函数



我认为这是相当基本的,但我在这里找不到任何来源。

派生类包含需要传递给基类的初始化信息。在这种情况下,它是一个内存预留。

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在调用基构造函数时还没有初始化,还是这里发生了其他事情?

我已经了解到,在C++中,#define for constant是不可取的,而且最好使用const值。这是这条规则的例外,还是有更合适的方法来处理这种情况?

这两个例子完全不可比。在第一个示例中,Derived的每个实例都有自己的memorySize副本。正如您所猜测的,Derived的构造函数负责处理这一问题。

你根本不想那样。类只有一个常量,而不是每个实例都有一个单独的常量。写为

class Derived: public Base
{
private:
static const unsigned short memorySize = 100;    

最新更新