嗨,我有一个代码片段,它是一个单例类(我相信),它以以前从未见过的方式使用'new'和其他一些作用域和静态限定符。因为我不知道它叫什么,所以找不到有关它的用途或目的的任何信息。代码如下:
在myClass.h文件中
class myClass { private: static myClass sm_myClass; myClass(); public: static void Create(void); };
在myClass.cpp中,我有
#include "myClass.h" #includemyClass* p_myClass = NULL; myClass myClass::sm_myClass; myClass::myClass() { } void myClass::Create(void) { p_myClass = &sm_myClass; new (p_myClass) myClass(); }
我的问题是:
1-.cpp文件的第6行(myClass myClass :: sm_myClass;)发生了什么
2-.cpp文件的第16行(new(p_myClass)myClass();)发生了什么
3-以这种方式使用类的总体目的是什么?
我真的希望这个问题不再重复。我搜索了一段时间,但不知道要搜索什么词。谢谢你的帮助。
1-.cpp文件的第6行(myClass myClass :: sm_myClass;)发生了什么
定义了一个静态类成员。
2-.cpp文件的第16行(new(p_myClass)myClass();)发生了什么
指定了新的放置位置,以重新使用分配给p_myClass
3-以这种方式使用类的总体目的是什么?
在某些情况下,单例可能会派上用场,但是通常最好传递接口,而不是将客户端代码紧密耦合到myClass
。
不要使用new
(放置new
或不放置)初始化单例实例。请改用Scott Meyer的单例实现,以确保线程安全:
class myClass { private: myClass(); public: static myClass& instance() { static myClass theInstance; return theInstance; } };
该实例将在首次访问该instance()
函数时创建,并且在以后的调用中保持不变。