<分区>
我正在实现一个线程安全的单例。但这方面(单例和线程安全)不是我的问题的一部分。
比较两个代码。代码一:
#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;
^
在我看来,唯一的区别是私有(private)构造函数分别有一个参数和零个参数。
我怎样才能帮助编译器理解我没有定义任何新东西,而只是调用构造函数?当只有一个参数时,编译器能够理解它。