我正在实现一个线程安全的单例。但是这方面(单线程&线程安全)不是我的问题的一部分。C++单例,奇怪的错误
比较两个代码。代码1:
#include <iostream>
using namespace std;
class DataLocation {
private:
DataLocation(std::string) {
}
public:
DataLocation& getInstance() {
std::string s = " ";
static DataLocation instance(s);
return instance;
}
};
int main() {
}
和代码2:
#include <iostream>
using namespace std;
class DataLocation {
private:
DataLocation() {
}
public:
DataLocation& getInstance() {
static DataLocation instance();
return instance;
}
};
int main() {
}
代码1编译罚款。代码2给出了以下错误:
15_singleton.cpp: In member function ‘DataLocation& DataLocation::getInstance()’:
15_singleton.cpp:15:34: error: cannot declare static function inside another function
static DataLocation instance();
^
15_singleton.cpp:16:12: error: invalid initialization of non-const reference of type ‘DataLocation&’ from an rvalue of type ‘DataLocation (*)()’
return instance;
^
从我的角度来看唯一的区别是私人构造函数有一个,分别为零参数。
我该如何帮助编译器理解我没有定义任何新东西,但我只是调用构造函数?只有一个参数时,编译器能够理解它。
或使用大括号。 – MikeMB
关于您的线程安全部分,请阅读C++保证初始化时间和静态顺序。 – deviantfan
@MikeMB:你用_大括号_指什么意思? – LiPo