私はissues with the Singleton Patternを認識していますが、C++ 11のメンバー関数指定子を使用してシングルトンを作成してC++ 11について学びました。C++でのシングルトン11メンバー関数の指定子を使用する
とにかく、私はこれまでのところ得た:
#include<new>
#include<vector>
class Singleton
{
private:
Singleton() = default;
~Singleton() = default;
public:
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
void* operator new(std::size_t) = delete;
void* operator new[](std::size_t) = delete;
void operator delete(void*) = delete;
void operator delete[](void*) = delete;
static const Singleton& getInstance()
{
static Singleton mySingleton;
return mySingleton;
}
};
int main(int argc, const char *argv[])
{
const Singleton& s1 = Singleton::getInstance();
// Why does this compile?
std::vector<Singleton> v1;
// Or this?
std::vector<Singleton> v2(50);
return 0;
}
そして、私の質問は、これらの行を行う理由:
std::vector<Singleton> v1;
std::vector<Singleton> v2(50);
コンパイルし、デフォルトシングルトンのコンストラクタはであることのエラーを報告しません私的な文脈?
私は64ビットLinuxマシンでgcc 4.8.2を使用しています。このコードはhereもコンパイルします。
+1。私はそれがベクトルが空であるが、それはそうではないようだと言いました(http://ideone.com/QEe5SN)。 – Angew
私は質問を編集し、サイズコンストラクタを追加しました。 – tmaric
これは[GCC bug#56429](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56429)で、おそらく[GCC bug#54812](http://gcc.gnu。 org/bugzilla/show_bug.cgi?id = 54812)、これは "FIXED"とマークされています。 – Casey