如何防止程序违反单例模式 我试图在C++中实现单模式。 static class_test* getinstance() { static class_test single_obj; return &single_obj; }

如何防止程序违反单例模式 我试图在C++中实现单模式。 static class_test* getinstance() { static class_test single_obj; return &single_obj; },c++,singleton,C++,Singleton,如果我想创建singleton对象,我将使用这个方法 class_test *c = class_test :: getinstance(); 因此,可以确保每次都维护单个对象 但在同一个程序中,我使用了以下语句 class_test test; 这似乎也是一种工作。我认为这违反了单身模式 我的理解正确吗 或者单例模式的实现由程序员负责?您应该声明class\u test::class\u test()为私有,以防止用户实例化新对象。您应该声明class\u test::class\u te

如果我想创建singleton对象,我将使用这个方法

class_test *c = class_test :: getinstance();
因此,可以确保每次都维护单个对象

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

class_test test;
这似乎也是一种工作。我认为这违反了单身模式

我的理解正确吗


或者单例模式的实现由程序员负责?

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

您应该声明
class\u test::class\u test()
作为私有,以防止用户实例化新对象。

以下是您应该执行的操作:

  • 将类的所有构造函数设为私有。这样,只有class_test::getinstance(参见下一点)可以访问构造函数

  • 使getinstance成为类_test的静态函数(这样它就可以访问构造函数)

  • 将析构函数公开(这是默认设置,因此您不必真正执行任何操作)

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


    考虑改用依赖项注入。

    以下是您应该做的:

  • 将类的所有构造函数设为私有。这样,只有class_test::getinstance(参见下一点)可以访问构造函数

  • 使getinstance成为类_test的静态函数(这样它就可以访问构造函数)

  • 将析构函数公开(这是默认设置,因此您不必真正执行任何操作)

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


    考虑改用依赖注入。

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