【问题标题】:how to prevent program from violation of singleton pattern [duplicate]如何防止程序违反单例模式[重复]
【发布时间】:2014-06-23 04:29:01
【问题描述】:

我正在尝试在 C++ 中实现单例模式。

static class_test* getinstance()
{
   static class_test single_obj;
   return &single_obj;
}

如果我想创建单例对象,我会使用这种方法。

class_test *c = class_test :: getinstance();

因此确保每次都维护单个对象。

但在同一个程序中我使用了以下语句

class_test test;

这似乎也有效。我认为这违反了单例模式。

我的理解正确吗?

或者单例模式的实现是程序员的手?

【问题讨论】:

  • 你在网上搜索过“c++ singleton”吗?有很多例子可以比较。
  • 您可以通过将构造函数设为私有来防止多个实例,因此只有访问器函数(静态成员)可以创建它。但是think twice 关于反模式在您的程序中是否有意义。
  • 单例只是修饰全局变量的一种奇特方式。
  • 只有在全局可访问的情况下。单例意味着应该只有一个实例。它仍然可能是依赖注入的。

标签: c++ singleton


【解决方案1】:

您应该将class_test::class_test() 声明为私有,以防止用户实例化新对象。

【讨论】:

    【解决方案2】:

    这是你应该做的:

    1. 将 class_test 的所有构造函数设为私有。这样,只有 class_test::getinstance(见下一点)才能访问构造函数。

    2. make getinstance,class_test 的静态函数(因此它可以访问构造函数)

    3. 将析构函数设为公开(这是默认设置,因此您实际上不必做任何事情)

    也就是说,您可能不应该在生产代码中使用单例,因为它们会在代码中引入使重构和松散耦合变得困难的地方。

    考虑改用依赖注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2020-09-09
      • 2018-01-13
      • 1970-01-01
      • 2019-03-20
      • 2013-07-04
      • 1970-01-01
      相关资源
      最近更新 更多