gpt4 book ai didi

C++ 单例和 new 运算符

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:40 25 4
gpt4 key购买 nike

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

在我的 myClass.h 文件中

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

在我的 myClass.cpp 中

#include "myClass.h"
#include <new>

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 - What is happening at line 6 ( myClass myClass::sm_myClass; ) of the .cpp file

定义了一个静态类成员。

2 - What is happening at line 16 ( new (p_myClass) myClass(); ) of the .cpp file

placement new 被指定为重用为 p_myClass 分配的内存

3 - What is the overall purpose of using a class in this way?

在某些情况下,单例 可能会派上用场,但通常最好传递接口(interface),而不是将客户端代码与 myClass 紧密耦合。


不要使用new(无论是否放置new)来初始化单例实例。请改用Scott Meyer 的 单例实现,它可以保证线程安全:

class myClass
{
private:
myClass();
public:
static myClass& instance() {
static myClass theInstance;
return theInstance;
}
};

实例将在第一次访问 instance() 函数时创建,并在任何后续调用中保持不变。

关于C++ 单例和 new 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38796566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com