防止A类创建B类实例

时间:2016-11-08 07:42:12

标签: c++ class inheritance instance

动机

假设我有一个类Logger,许多类/项目使用它来处理日志消息。

现在,我正在实施一个新的课程MyProcessor 不能按原样使用课程Logger。它需要在内部更改Logger的{​​{1}}个成员才能按预期工作。

我的方法

我生成了一个新的课程Logger 扩展MyLogger并在所有正确的位置添加特定代码。

现在,班级Logger可以创建班级MyProcessor的实例 s 并享受正确的功能

问题

新成员加入了我的团队,需要将代码添加到课程MyLogger。他不知道课程MyProcessor无法直接在课程Logger

中使用的限制

解决方案

让我们在编译时阻止它:确保类MyProcessor永远不会创建类MyProcessor的实例。

注释

我知道还有其他方法可以解决我的问题(比如,使Logger成为一个抽象类,每个派生类实现一组虚函数)。 但是,我对解决这个问题更感兴趣,而不是采用不同的方法。

1 个答案:

答案 0 :(得分:3)

class Logger {};

class MyProcessor
{
private:
    // If you get a compilation error using this, consult the lead.
    class Logger { Logger() = delete; };

public:
    void foo() { Logger nah; }
};

auto main() -> int { MyProcessor(); }

这不是“不能用一些适度的努力”,而是“不能无意中”。