Re: Запретить конструкцию
От: Alex34 Израиль  
Дата: 19.05.05 19:09
Оценка:
Здравствуйте, 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 () ;

};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.