gpt4 book ai didi

c++ - 为什么在 C++ 中创建单例类时静态函数不能引用静态变量?

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:45 24 4
gpt4 key购买 nike

我试图理解单例设计模式并创建了一个最简单的模式:

#include <iostream>


class mySingleton{

private:
static mySingleton *ptr;
mySingleton(){ }

public:
static mySingleton* getInstance(){
if(!ptr){
ptr = new mySingleton();
return ptr;
} else return ptr;
}

void msg(){
std::cout << " Hello World!! " << std::endl;
}

};


int main(){

mySingleton* obj = mySingleton::getInstance();
mySingleton* obj2 = mySingleton::getInstance();

return 0;
}

当我尝试编译时,我得到:

Undefined symbols for architecture x86_64:
"mySingleton::ptr", referenced from:
mySingleton::getInstance() in ccm822LI.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

为什么我不能在静态函数中使用 ptr,因为 ptr 也是一个静态变量?我在这里错过了什么吗?

最佳答案

Am I missing something here?

是的,有几件事:

  1. As mentioned您缺少静态 mySingleton 指针变量的定义。
  2. 您的代码不是线程安全的
    实现它的正确方法是在 getInstance() 函数(又名 Scott Meyer's Singleton )中使用局部静态变量:

    static mySingleton* getInstance(){
    static mySingleton theInstance;
    return &theinstance;
    }

    此实现保证线程安全,您无需为内存分配而烦恼。

  3. 使用指针可能不是您想要的返回类型

    static mySingleton& getInstance(){
    // ^
    static mySingleton theInstance;
    return theinstance;
    }

关于c++ - 为什么在 C++ 中创建单例类时静态函数不能引用静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998408/

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