Здравствуйте, Igor Romanov, Вы писали:
IR>Вопрос:
IR>Как сконструировать класс так, что его инстансы можно будет создать только динамически (через new)?
Может в таком вот виде:
class CNoAuto
{
public:
static CNoAuto* Make(int _param1, int _param2 )
{
return new CNoAuto( _param1, _param2 );
}
static CNoAuto* Make( const CNoAuto* _ptr )
{
retur new CNoAuto( *_ptr );
}
virtual ~CNoAuto() {}
private:
CNoAuto(int _param1, int _param2 )
{
///тут действия по инициализации
}
CNoAuto( const CNoAuto& )
{
///тут действия по инициализации
}
};
Здравствуйте, Igor Romanov, Вы писали:
IR>Вопрос:
IR>Как сконструировать класс так, что его инстансы можно будет создать только динамически (через new)?
Сделать деструктор приватным, а в самом классе сделать статические функции создания/удаления:
class A
{
~A() {}
public:
static A* create() { return new A(); }
static void destroy(A* p) { delete p; }
};
int main()
{
A* pa = A::create();
A::destroy(pa);
return 0;
}
On Wed, 27 Oct 2004 09:25:59 GMT, Bell <3057@news.rsdn.ru> wrote:
> IR>Вопрос:
>
> IR>Как сконструировать класс так, что его инстансы можно будет создать только динамически (через new)?
> Сделать деструктор приватным, а в самом классе сделать статические функции создания/удаления:
Достаточно сделать д-тор непубличным. Ф-цию удаления, для удобства, можно сделать нестатической.
struct some
{
void destroy() const { delete this; }
protected:
~some() {}
};
//...
some* s = new some;
s->destroy();
Вообще, если такое желание возникает, скорее всего, правильным решением будет вообще скрыть от пользователя реализацию и предоставить лишь интерфейс и виртуальный конструктор. Это делает дизайн более ясным:
struct some
{
virtual void do_some() = 0;
virtual ~some() {}
};
// std::auto_ptr<> здесь говорит нам о том, что мы передаем пользователю объект
// в монопольное владение (strict ownership), и он ответственен за его удаление
std::auto_ptr<some> some_ctor();
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9 gamma