Здравствуйте, Edge, Вы писали:
E>Всем привет
E>Захотелось запретить объявление объекта класса через
E>E>...
E>CClassName obj; //так нельзя
E>...
E>
E>При этом мне хочется чтобы можно было использовать только динамическое создание обьекта
E>E>...
E>CClassName *obj = new CClassName;
E>...
E>
E>Причем чтобы ошибки отлавливались при компиляции...
E>Спасибо за внимание
Ёще один возможный вариант с защищенным конструктором:
class CClassName {
...
private:
CClassName () ;
};
Можно определить класс умного указателя который бы был дружествен
твоему классу и в своем конструкторе динамически создавал объект твоего класса
template< class T>
class CSmartPtr
{
...
CSmartPtr() { pObj = new T;}
...
// Стандартные методы умного указателя
...
T* operator->() const { return pObj;}
private:
T* pObj ;
};
В Исходный класс надо добавить :
class CClassName {
friend class CSmartPtr<CClassName>;
...
private:
CClassName () ;
};