我有一个从基类继承的类,它提供了一个空的受保护的构造函数。
是否需要在派生类中实现空白构造函数(和析构函数),还是编译器将为我生成适当的构造函数。我正在使用C++ 11。
虽然这些问题的一些方面在这篇文章(How is "=default" different from "{}" for default constructor and destructor?)中得到了解答,但我最感兴趣的是类派生时的行为。
所以我有这样的东西:
template<typename EnumClass>
class IVCounter
{
protected:
//!
//! \brief Ensure that this base class is never instantiated
//! directly.
//!
IVCounter() {}
public:
//!
//! \brief Virtual destructor
//!
virtual ~IVCounter() {}
};
class Derived: public IVCounter<SomeType>
{
// Do I have to do this?
Derived()
: IVCounter()
{}
~Derived() {}
};或者,在导出的内容中,我可以简单地做:
Derived() = default;
~Derived() = default;或者甚至把它完全抛在脑后?
发布于 2018-05-09 08:49:23
这里不需要显式构造函数。隐式默认构造函数就足够了。N4659草案指出,在15.6.2初始化基地和成员class.base.init第13节:
在非委托构造函数中,初始化按以下顺序进行:
默认的构造函数只有一个空体,但是对象的构造意味着它的基类的构造。
发布于 2018-05-09 08:37:16
是。编译器将生成空白构造函数,不需要。
发布于 2018-05-09 08:40:42
默认生成的构造函数将是public,因此下面就足够了
class Derived: public IVCounter<SomeType>
{
};https://stackoverflow.com/questions/50248755
复制相似问题