Я могу реализовать шаблон Singleton следующим образом:
Код: Выделить всё
class Logger
{
public:
static Logger& instance()
{
static Logger singleton {};
return singleton;
}
Logger(const Logger&) = delete;
auto operator= (const Logger&) = delete;
// ... member functions declared here
};
Код: Выделить всё
void start()
{
auto& logger = Logger::instance();
logger.debug("start() called");
// ...
}
По той же причине недавнее предложение стандарта C++ изменило правила для операторов () и [], чтобы их можно было объявлять статическими. Это позволяет избежать необходимости передавать указатель this при каждом вызове.
Теоретически компилятор мог бы оптимизировать неявный аргумент указателя this, поскольку его местоположение известно во время компиляции (адрес локальной статической переменной). Но я думаю, что компилятор не знает.
Возможно, это скорее обсуждение особенностей языка, чем поиск реального решения.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -singleton
Мобильная версия