Ответ 1
Я предпочитаю ссылку. Я использую ссылку вместо указателя всякий раз, когда хочу документировать, что:
- Он не может быть null
- Он не будет изменен (чтобы указать на что-то еще)
- Его нельзя удалять
При реализации singleton в С++ лучше ли GetInstance() возвращать указатель на объект singleton или ссылку? Это действительно имеет значение?
Я предпочитаю ссылку. Я использую ссылку вместо указателя всякий раз, когда хочу документировать, что:
Я думаю, было бы безопаснее возвращать ссылку, но не забывайте о "защите от копирования" вашего одноэлементного объекта.
Неважно, что возврат ссылки неявно гарантирует, что синглтон существует. (Если это не так, вы должны выбросить исключение.)
Это также игнорирует советы о том, что синглтоны являются злыми, так как глобалы являются злыми, поскольку синглтоны в основном являются глобальными в дизайне одежды.
Метод 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/