namespace vs singleton
От: Аноним  
Дата: 18.08.09 13:22
Оценка:
Здравствуйте,

В проекте понадобился маленький класс, объект которого должен существовать в единственном экземпляре. Кроме того, он должен быть доступен из любого места программы. В качестве альтернативы синглтону был предложен namespace. Думаю из кода будет понятна общая идея:

// manager.h
namespace Manager
{
    void f();
    void g();
}

// manager.cpp
#include "manager.h"

namespace
{
    // keep here Manager "instance" variables state
    int managerData_ = 0;
    ...
}

void Manager::f()
{
   ++managerData_;
}

void Manager::g()
{
   ...
}


Т.е. определяем интерфейс в хедере, а все переменные кладем в cpp в unnamed-namespace. Таким образом гарантируется существование лишь одного экземпляра. Конечно, это не ООП подход, но у него есть свои преимущества:
1) Простота. Не требуется абсолютно никаких манипуляций с тем, чтобы сделать класс синглтоном
2) Инкапсуляция: пользователю виден лишь интерфейс класса, скрыты даже переменные класса.

Наследование от класса не требуется. Хочется узнать, плоха ли такая идея, и если да, то чем?
(Не из идеологических соображений ООП, а с точки зрения использования)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.