我想知道初始化抽象类的成员是否是最佳实践(至少有一个纯虚拟成员函数,可能是 dtor)。另一种选择是在继承类中执行此操作。
在继承类中初始化
class IPlayer
{
public:
virtual ~IPlayer() {};
protected:
bool m_alive;
};
class Bomber : protected IPlayer
{
public:
Bomb(bool t_alive = true)
{
m_alive = t_alive;
}
~Bomb();
};
在父抽象类中初始化
class IPlayer
{
public:
virtual ~IPlayer() {};
protected:
bool m_alive { true };
};
class Bomber : protected IPlayer
{
public:
Bomb();
~Bomb();
};
我应该选择哪一个,为什么?
最佳答案
严格来说,如果一个成员没有被类内初始化器、ctor-init-list初始化,在静态/线程存储类零初始化的情况下,或者在聚合值初始化或聚合初始化的情况下,它将被默认初始化,这使得像 bool
这样的类型不确定。
此后您可以分配它们,但这不是同一件事。
现在我们进入下一部分:
每个类都应该尽可能合理地强制执行自己的不变量。是的,拥有非私有(private)
成员会降低这种能力,但这种便利性有时是值得的,这种便利可以转化为更少的拷贝,从而可能提高效率。
此外,您不应该不必要地重复自己的话。
因此,请使用类内初始值设定项。
关于c++ - 我应该初始化抽象类的成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440364/