假设我有一个类Logger
,许多类/项目使用它来处理日志消息。
现在,我正在实施一个新的课程MyProcessor
不能按原样使用课程Logger
。它需要在内部更改Logger
的{{1}}个成员才能按预期工作。
我生成了一个新的课程Logger
扩展类MyLogger
并在所有正确的位置添加特定代码。
现在,班级Logger
可以创建班级MyProcessor
的实例 s 并享受正确的功能
新成员加入了我的团队,需要将代码添加到课程MyLogger
。他不知道课程MyProcessor
无法直接在课程Logger
让我们在编译时阻止它:确保类MyProcessor
永远不会创建类MyProcessor
的实例。
我知道还有其他方法可以解决我的问题(比如,使Logger
成为一个抽象类,每个派生类实现一组虚函数)。
但是,我对解决这个问题更感兴趣,而不是采用不同的方法。
答案 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(); }
这不是“不能用一些适度的努力”,而是“不能无意中”。