С++ singleton GetInstance() return

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

Ответы

Ответ 1

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

  • Он не может быть null
  • Он не будет изменен (чтобы указать на что-то еще)
  • Его нельзя удалять

Ответ 2

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

Ответ 3

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

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

Ответ 4

Метод 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/