|
|
От: | Serpent_T.B. | |
| Дата: | 02.10.05 18:32 | ||
| Оценка: | |||
MX>Следующий код всем хорош:
MX>MX>class SomeClass MX>{ MX> static SomeOtherClass value; MX>public: MX> ... MX>}; MX>
MX>Вот только объект value болтается в памяти до самого завершения приложения, а хотелось бы, чтоб он уничтожался как только нет ни одного из SomeClass. Создаваться единственный SomeOtherClass должен, как только есть хотя бы один SomeClass. Есть тому стандартное решение или CRTP и указатель мне в руки?
...
MX>Это хорошо, если такой указатель один в классе, а если их несколько?
class SomeClass
{
private:
static SomeOtherClass* value1;
...
static SomeOtherClass* valueN;
static int sm_cnt; //инициализируется нулем
public:
SomeClass()
{
if((sm_cnt++)==0)
{
if (value1 == NULL)
value1 = new SomeOtherClass();
...
if (valueN == NULL)
valueN = new SomeOtherClass();
}
}
~SomeClass()
{
if((--sm_cnt)==0)
{
if (value1)
{
delete value1;
value1 = NULL;
}
...
if (valueN)
{
delete valueN;
valueN = NULL;
}
}
}
};//SomeClass
SomeClass::SomeOtherClass* value1 = NULL;
...
SomeClass::SomeOtherClass* valueN = NULL;
int SomeClass::sm_cnt = 0;