私はスレッドセーフなシングルトンを実装しています。しかし、この側面(シングルトン&スレッドセーフ)は私の質問の一部ではありません。C++シングルトン、奇妙なエラー
2つのコードを比較してください。コード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罰金コンパイルします。唯一の違いは、プライベートコンストラクタはそれぞれ、ゼロのパラメータを1持っていることである私の視点から
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;
^
:コード2には、次のエラーが発生します。
コンパイラが私が新しいものを定義していないことを理解するにはどうすればよいですか?コンストラクタを呼び出すだけですか?コンパイラは、1つのパラメータがある場合、それを理解することができます。
または中括弧を使用してください。 – MikeMB
スレッドセーフな部分については、C++で初期化の時間と静的順序を保証します。 – deviantfan
@MikeMB:_use中括弧ではどういう意味ですか? – LiPo