2016-08-25 100 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(){}' 'simpleSingleton(const simpleSingleton& rs)

構造函數應返回的類的對象。在上面的例子中,這兩個構造函數都沒有返回語句。然而這似乎是標準的簡單實現。這是爲什麼?

+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 –