C++ 阻止用户创建对象实例

标签 c++ oop design-patterns singleton objectfactory

我必须为某些类型的对象创建简单的单例对象工厂。问题是我找不到阻止用户通过构造函数创建对象实例的聪明方法。我知道我可以将构造函数移动到私有(private)/ protected 部分,但是当构造函数是私有(private)/ protected 时,工厂现在将如何创建新对象?让工厂成为每个类(class)的 friend 并不是很聪明,因为我需要在每个标题中预先声明工厂并编写额外的“ friend 工厂”;在每个类(class)。如何正确执行此操作?

最佳答案

在类中,添加一个静态成员作为指向类相同类型的指针。这将是您的单例。

初始化实例时,运行构造函数。

如果这是第一次,静态成员为空(从未初始化),正常运行构造函数并设置默认值。最后还将静态成员设置为this。现在您的单例已初始化。

在后续的构造函数调用中,静态指针不会为空。创建一个指向类类型的临时指针。将 this 指针设置为 this,然后将 this 设置为静态成员并删除指针。这将每次都删除新实例并返回相同的静态实例。

关于C++ 阻止用户创建对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50428683/

相关文章:

c++ - 多个if方法的构造约定

c++ - 为什么std::unique调用std::sort?

performance - 原型(prototype)与享元

java - 如何将 Iterable<interface> 返回类型方法重写为 Iterable<?扩展接口(interface)>返回类型方法

c++ - 传递对象还是传递引用/指针?

c#-4.0 - 是否有用于验证的设计模式?

c# - 初始化一个对象c#

c++ - 读取字符串 C++ 的字符时出错

java - 使用命令模式时构造命令对象的首选模式

c++ - 通过 C++ 接口(interface)访问 PostgreSQL(链接器错误)