我正在實現一個線程安全的單例。但是這方面(單線程&線程安全)不是我的問題的一部分。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