Здравствуйте, Аноним, Вы писали:
А>А>template <typename BaseT>
А>class Singleton
А> : public BaseT
А> , private boost::noncopyable
А>{
А>private:
А> Singleton()
А> {
А> }
А> ~Singleton()
А> {
А> }
А>public:
А> static Singleton& instance(Singleton* p = new Singleton() )
А> {
А> static std::auto_ptr<Singleton> _instance ( p );
А> return _instance.get();
А> }
А>};
А>
А>Как модифицировать этот класс, чтобы он создавал экземпляр _instance, если у BaseT нет конструктора по умолчанию? Например, в качестве класса BaseT я использую класса Trace (или Log) для вывода отладочной информации, в конструктор которого передаю имя файла для лога. Используется RAII, в конструкторе файл открывается, в диструкторе закрывается.
X& x = XSingleton<X>::instance(new X(....));
В данном случае Singleton будет следить за созданным вами объектом (то есть мы передаем владение).