Я реализую потокобезопасный синглтон. Но этот аспект (singleton & thread-safe) не является частью моего вопроса.C++ singleton, странная ошибка
Сравните два кода. Код 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: что вы имеете в виду с фигурными фигурками _use? – LiPo