2016-08-25 98 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 –