相关疑难解决方法(0)

C++ Singleton设计模式

最近我碰到了C++的Singleton设计模式的实现/实现.看起来像这样(我从现实生活中采用了它):

// a lot of methods are omitted here
class Singleton
{
   public:
       static Singleton* getInstance( );
       ~Singleton( );
   private:
       Singleton( );
       static Singleton* instance;
};
Run Code Online (Sandbox Code Playgroud)

从这个声明我可以推断出实例字段是在堆上启动的.这意味着存在内存分配.对我来说完全不清楚的是,什么时候内存将被解除分配?还是有漏洞和内存泄漏?好像在实施中存在问题.

我的主要问题是,如何以正确的方式实施它?

c++ singleton design-patterns

692
推荐指数
11
解决办法
65万
查看次数

Singleton实例声明为GetInstance方法的静态变量,它是否是线程安全的?

我已经看到了Singleton模式的实现,其中实例变量在GetInstance方法中被声明为静态变量.像这样:

SomeBaseClass &SomeClass::GetInstance()
{
   static SomeClass instance;
   return instance;
}
Run Code Online (Sandbox Code Playgroud)

我认为这种方法有以下积极方面:

  • 代码更简单,因为它的编译器只负责在第一次调用GetInstance时创建此对象.
  • 代码更安全,因为没有其他方法可以获取对实例的引用,但是使用GetInstance方法并没有其他方法来更改实例,而是在GetInstance方法中.

这种方法的不利方面是什么(除了这不是非常OOP-ish)?这是线程安全的吗?

c++ singleton design-patterns

30
推荐指数
2
解决办法
3万
查看次数

标签 统计

c++ ×2

design-patterns ×2

singleton ×2