【问题标题】:C++: any way to prevent any instantiation of an abstract base class?C++:有什么方法可以防止抽象基类的任何实例化?
【发布时间】:2011-09-10 11:24:37
【问题描述】:

除了拥有纯虚函数之外,有没有办法防止抽象基类的实例化?

我可以这样做:

class BaseFoo
{
    virtual void blah() = 0;
};

class Foo : public BaseFoo
{
    virtual void blah() {}
};

但我想避免使用 vtable。 (根据my other question about virtual destructors

Microsoft ATL 具有 ATL_NO_VTABLE 来完成此任务(或者至少我认为它就是这样做的......)

【问题讨论】:

  • 为什么要避免使用 vtable? (而且,如果您永远不会使用该方法是虚拟的这一事实,那么您为什么还要为基类烦恼?)\

标签: c++ class abstract


【解决方案1】:

你可以创建一个受保护的构造函数

【讨论】:

    【解决方案2】:

    一个非常明显的方法是声明一个受保护的构造函数,并在非抽象派生类中声明公共构造函数。

    这当然将正确性的负担转移到派生类,但至少基类受到保护。

    【讨论】:

    • 不错。但也许不是“很明显”;-)
    • 嗯,与我期待人们发布的疯狂模板黑客相比,这很明显!
    猜你喜欢
    • 2017-10-30
    • 2015-03-19
    • 2022-07-22
    • 2014-07-12
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多