阻止类A创建类B的实例

Prevent class A from creating an instance of class B

本文关键字:实例 创建      更新时间:2023-10-16

动机

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

现在,我正在实现一个新的类MyProcessor不能按原样使用类Logger。它需要在内部更改一些Logger成员,Logger才能按预期工作。

我的方法

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

现在,类MyProcessor可以创建类MyLogger的实例s并享受正确的功能

问题

一个新成员加入了我的团队,需要向类MyProcessor添加代码。他不知道Logger类不能直接用于MyProcessor类的限制

解决方案

让我们在编译时防止这种情况:确保类MyProcessor永远不会创建类Logger的实例。

备注

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

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(); }

这不是";付出一点小小的努力都做不到";,但是";不能不经意间";。