Читаем Идиомы и стили С++ полностью

Третий вариант кажется подходящим, но только кажется. Мы получим ошибку создания во время исполнения. Вот радость то, конструируем объект, а он нам исключения выбрасывает, мы об этом уже говорили в Шаге 12.

В общем, как водится, приходим к смарт-указателю. Конечно, переменную-член указателя на живой, натуральный объект объявляем статической. Но указатель-то инициализируется нулем, NULL. Это потом конструктору передать можно какие угодно параметры. Далее нужно определить статическую функцию, которая при первом обращении создает одинокий объект, а потом возвращает указатель на него. Нужно еще определить так же и разрушающую функцию; проблема будет в том, когда ее вызвать. Теперь можно создавать море смартов - реально они будут указывать на единственный объект. Код для такого способа уже незачем писать.

Зато интересно сделать вот что: пусть класс одинокого устройства будет смарт-указателем на самого себя[1]!

class CSingleton {

public:

 static CSingleton* GetInstance (void);

 static void DestroyInstance (void) {

  if (m_instance) delete m_instance;

 }

private:

 static CSingleton* m_instance;

protected:

 CSingleton() {}

};

CSingleton* CSingleton::m_instance = NULL;

CSingleton* CSingleton::GetInstance() {

 if (!m_instance) m_instance = new CSingleton;

 return m_instance;

}

Здесь доступ к единичному экземпляру осуществляется исключительно через статическую функцию GetInstance(). Код можно либо вставлять в каждое определение классов-одиночек, либо наследовать от базового класса и вести коллекцию одиночек. В любом случае, такое решение достаточно гибкое, чем объявление глобальных переменных.

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT