相关疑难解决方法(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:如何使用它

编辑:从另一个问题我提供了一个答案,链接到很多关于单身人士的问题/答案:有关单身人士的更多信息:

所以我读过Singletons的帖子:好的设计还是拐杖?
争论仍然激烈.

我认为单身人士是一种设计模式(好的和坏的).

Singleton的问题不是模式而是用户(对不起所有人).每个人和他们的父亲都认为他们可以正确地实施一个(而且从我做过的许多采访中,大多数人都做不到).此外,因为每个人都认为他们可以实现正确的Singleton,他们滥用模式并在不合适的情况下使用它(用Singletons替换全局变量!).

所以需要回答的主要问题是:

  • 什么时候应该使用Singleton
  • 如何正确实现Singleton

我对这篇文章的希望是,我们可以在一个地方收集(而不是谷歌和搜索多个网站)一个权威的来源,了解何时(以及如何)正确使用单身人士.同样合适的还有一份反用法和常见的不良实施清单,解释了为什么他们无法工作以及为了实现他们的弱点.


所以让球滚动:
我会举起手来说这是我用的,但可能有问题.
我喜欢"Scott Myers"在他的书"Effective C++"中处理这个主题

使用单身人士的好情况(不是很多):

  • 记录框架
  • 线程回收池
/*
 * C++ Singleton
 * Limitation: Single Threaded Design
 * See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
 *      For problems associated with locking in multi threaded applications
 *
 * Limitation:
 * If you use this Singleton (A) within a destructor of another Singleton (B)
 * This Singleton (A) must be fully constructed before the constructor of (B)
 * is called.
 */
class MySingleton
{ …
Run Code Online (Sandbox Code Playgroud)

c++ singleton design-patterns

285
推荐指数
9
解决办法
17万
查看次数

内联函数和静态内联函数之间的区别

任何人都可以告诉我内联函数和静态内联函数之间的区别是什么?

在哪些情况下,我更喜欢静态内联而不是内联?

我问这个问题,因为我有一个内联函数,我在链接(relocation error:... symbol has been discarded with discarded section ...)期间遇到编译问题.我使它成为一个正常的功能,它工作.现在我的一些老人告诉我尝试使用静态内联.以下是我的功能:

inline void wizSendNotifier (const char* nn_name, bpDU* arg=0, int aspect = -1)
{
   wizuiNotifier* notifier = ::wizNtrKit.getNotifier (nn_name);
   notifier->notify (arg, aspect);
}
Run Code Online (Sandbox Code Playgroud)

而这不是在课堂上.这是在头文件中!

我想对静态函数的调用只能在定义它的特定TU中完成.

由于我的函数是在头文件中,并且如果我将其设置为静态,是否会出现这样的情况:在哪里我包含该头文件,静态函数可以用于该翻译单元?

c++ static solaris compiler-errors inline

26
推荐指数
1
解决办法
2万
查看次数

静态vs内联函数在头文件中实现

inline在C++中的想法是用于链接/作用域.我把它externstatic全局对象放在同一个篮子里.

通常,对于在头文件中实现的函数,我的首选解决方案是将其设置为静态:

// In Foo.h
static void foo()
{
    // Do stuff...
}
Run Code Online (Sandbox Code Playgroud)

但是,我相信这也是有效的,似乎并没有违反ODR:

// In Foo.h
inline void foo()
{
    // Do stuff...
}
Run Code Online (Sandbox Code Playgroud)

两者之间有什么语义差异?另外,我不确定C++标准的哪些区域可以解释确切的差异,或者它是否仅仅是未定义的,并且差异在于实现.

c++

15
推荐指数
3
解决办法
3935
查看次数