C++;单例GetInstance()返回 在C++中实现单体时,GETStaseFor()是否更好地返回单对象的指针,还是引用?这真的很重要吗?

C++;单例GetInstance()返回 在C++中实现单体时,GETStaseFor()是否更好地返回单对象的指针,还是引用?这真的很重要吗?,c++,reference,singleton,pointers,C++,Reference,Singleton,Pointers,除了返回一个引用隐式地保证单例存在之外,这并不重要。(如果没有,则应抛出异常。) 这也忽略了一个建议,即单身人士和全球人士一样邪恶,因为单身人士在设计图案服装中基本上都是全球人士。我更喜欢参考。每当我想记录以下内容时,我都使用引用而不是指针: 它不能为空 它不会被更改(指向其他内容) 不能删除它 我认为返回引用会更安全,但不要忘记单例对象的“复制保护”。getInstance()方法返回引用,因为函数静态对象是在控制流首次通过其定义时初始化的。使用引用也更好:现在用户不能删除单例指针。此外,此

除了返回一个引用隐式地保证单例存在之外,这并不重要。(如果没有,则应抛出异常。)


这也忽略了一个建议,即单身人士和全球人士一样邪恶,因为单身人士在设计图案服装中基本上都是全球人士。

我更喜欢参考。每当我想记录以下内容时,我都使用引用而不是指针:

  • 它不能为空
  • 它不会被更改(指向其他内容)
  • 不能删除它

我认为返回引用会更安全,但不要忘记单例对象的“复制保护”。

getInstance()方法返回引用,因为函数静态对象是在控制流首次通过其定义时初始化的。使用引用也更好:现在用户不能删除单例指针。此外,此实现非常简单

class CKeyboard
{
public:
    static CKeyboard& GetInstance()
    {
        static CKeyboard keyboard;
        return keyboard;
    }

private:
    CKeyboard() {}
    CKeyboard(const CKeyboard&);
    CKeyboard& operator=(const CKeyboard&);
};

正如德米特里·马特维夫(Dmitriy Matveev)在下面指出的那样:不要忽视保护单例不被复制。请参阅:boost::noncopyable。“请参阅boost::noncopyable”,或者只声明一个私有复制构造函数和赋值运算符。是的,关于单例还有一些其他问题:例如,它们是否“有味道”,它们是否线程安全,它们是否按照正确的顺序构造:我只是试图回答OP中的实际问题。哦,我想我明白你的意思了:如果它是一个引用而不是指针,那么人们更容易意外地复制它,在声明变量、参数或返回码的类型时,忘记包含
。+1回答正确。我想补充的是,无论返回指针还是引用,都应该保护singleton对象不被复制。。。但我同意,不经意间将其复制为引用要容易得多。参见本文第5页的Meyers部分(理论上的C++:单例模式,第一部分),关于引用的使用:+1对于提出“复制保护”,我坚持单例有合法的使用,一个活跃的开发人员在开发各种各样的软件时,很可能每十年就需要一个。每次使用singleton都是一种承认,你不希望你的代码朝着一个特定的方向扩展。至少我发现这是真的。MSN