如何防止程序违反单例模式

时间:2014-05-06 13:55:13

标签: c++ singleton

我正在尝试用c ++实现单例模式。

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

如果我想创建单例对象,我将使用此方法。

class_test *c = class_test :: getinstance();

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

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

class_test test;

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

我的理解是否正确?

或者单例模式的实现由程序员掌握?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

这是你应该做的:

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

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

  3. 将析构函数设为公共(这是默认值,因此您不必真正做任何事情)

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

    请考虑使用依赖注入。