当前位置:  开发笔记 > 编程语言 > 正文

C ++单例和新运算符

如何解决《C++单例和新运算符》经验,为你挑选了1个好方法。

嗨,我有一个代码片段,它是一个单例类(我相信),它以以前从未见过的方式使用'new'和其他一些作用域和静态限定符。因为我不知道它叫什么,所以找不到有关它的用途或目的的任何信息。代码如下:

在myClass.h文件中

class myClass
{
private:
    static myClass sm_myClass;
    myClass();
public:
    static void Create(void);
};

在myClass.cpp中,我有

#include "myClass.h"
#include 

myClass* 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> 小智..:

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()函数时创建,并且在以后的调用中保持不变。

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有