2016-08-25 6 views
0

C++で単純なシングルトンパターンを実装しようとしています。コンストラクタのC++シンプルシングルトン実装のリターンステートメント

#include <iostream> 

class simpleSingleton 
{ 
private: 
    static simpleSingleton * pInstance; 
    simpleSingleton(){} 
    simpleSingleton(const simpleSingleton& rs) { 
     pInstance = rs.pInstance; 
    } 
    simpleSingleton& operator = (const simpleSingleton& rs) 
    { 
     if (this != &rs) 
     { 
      pInstance = rs.pInstance; 
     } 
     return *this; 
    } 
    ~simpleSingleton(){}; 

public: 
    static simpleSingleton& getInstance() 
    { 
     static simpleSingleton theInstance; 
     pInstance = &theInstance; 

     return *pInstance; 
    } 
    void demo() 
    { 
     std::cout << "simple singleton." 
        << std::endl; 
    } 
}; 
simpleSingleton *simpleSingleton::pInstance = nullptr; 


int main() 
{ 
    /*Version 1 */ 
    simpleSingleton * p = &simpleSingleton::getInstance(); // cache instance pointer p->demo(); 
    p->demo(); 

    /*Version 2 */ 
    simpleSingleton::getInstance().demo(); 

    return 0; 
} 

私の質問は

simpleSingleton(){}' 'simpleSingleton(const simpleSingleton& rs)

simpleSingletonクラスのために利用できる複数のコンストラクタについてのコンストラクタは、クラスのオブジェクトを返すことが期待されています。上記の例では、いずれのコンストラクタもreturn文を持っていません。しかし、これは標準的なシンプトン実装のようです。何故ですか?

+1

コンストラクタは明示されていないとにかく、何も返しません。一般的にシングルトン(この場合を含む)を使用すると、 'getInstance'というメソッドを使用してオブジェクトのインスタンスを取得します。それがあなたが求めているものなら何ですか? –

+0

シングルトンのようなデザインパターンに移行する前に、C++クラスの基礎を理解しておくべきでしょう。あなたのコードからも、コピーコンストラクタと代入演算子はシングルトンには意味がありません。それは一意であるはずです。 –

答えて

2

あなたはシングルトンを使用する場合は、マイヤーズのシングルトンを使用します。

class Singleton 
{ 
private: 
    Singleton() = default; // Adapt here 
    ~Singleton() = default; // Adapt here 
    Singleton(const simpleSingleton& rs) = delete; 
    Singleton& operator = (const simpleSingleton&) = delete; 
public: 
    Singleton& GetInstance() 
    { 
     static Singleton instance; 
     return instance; 
    } 
}; 
+1

'= delete'と' = default'はどういう意味ですか? – liv2hak

+0

cppreference.comはあなたの友人です。http://en.cppreference.com/w/cpp/language/default_constructorをご覧ください。 –