C ++ синглтон GetInstance () возврат - PullRequest
15 голосов
/ 15 января 2009

При реализации синглтона в C ++ лучше ли GetInstance () возвращать указатель на объект синглтона или ссылку? Это действительно имеет значение?

Ответы [ 4 ]

34 голосов
/ 15 января 2009

Я предпочитаю ссылку. Я использую ссылку вместо указателя всякий раз, когда я хочу документировать это:

  • Это не может быть нулем
  • Оно не изменится (чтобы указать на что-то еще)
  • Не должно быть удалено
9 голосов
/ 15 января 2009

Я думаю, что было бы безопаснее вернуть ссылку, но не забывайте о "защите от копирования" вашего одноэлементного объекта.

1 голос
/ 15 января 2009

Это не имеет значения, кроме возврата ссылки, неявно гарантирующей, что синглтон существует. (Если этого не произойдет, вы должны выбросить исключение.)

Это также игнорирует совет о том, что синглтоны являются злом так же, как глобалы злы, поскольку синглтоны - это в основном глобалы в одежде с рисунком дизайна.

0 голосов
/ 15 декабря 2014

Метод getInstance () возвращает ссылку, поскольку статический объект-функция инициализируется, когда поток управления впервые передает свое определение. Также лучше работать со ссылкой: теперь пользователь не может удалить указатель синглтона. Кроме того, эта реализация настолько проста!

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

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

http://www.devartplus.com/3-simple-ways-to-create-singleton-in-c/

...