class SomeClass
{
static SomeOtherClass value;
public:
...
};
Вот только объект value болтается в памяти до самого завершения приложения, а хотелось бы, чтоб он уничтожался как только нет ни одного из SomeClass. Создаваться единственный SomeOtherClass должен, как только есть хотя бы один SomeClass. Есть тому стандартное решение или CRTP и указатель мне в руки?
спасибо.
Если не поможет, будем действовать током... 600 Вольт (C)
Здравствуйте, -MyXa-, Вы писали:
MX>Вот только объект value болтается в памяти до самого завершения приложения, а хотелось бы, чтоб он уничтожался как только нет ни одного из SomeClass.
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Здравствуйте, -MyXa-, Вы писали:
MX>>Вот только объект value болтается в памяти до самого завершения приложения, а хотелось бы, чтоб он уничтожался как только нет ни одного из SomeClass.
КД>Народ ленивый пошел, думать не хочет
КД>
Здравствуйте, -MyXa-, Вы писали:
MX>>>Вот только объект value болтается в памяти до самого завершения приложения, а хотелось бы, чтоб он уничтожался как только нет ни одного из SomeClass.
КД>>Народ ленивый пошел, думать не хочет
КД>>Про многопоточность я тоже думать не хочу
MX>И про конструктор копии Вы тоже не хотите подумать?
Ясный пфеннинг
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
MX>Вот только объект value болтается в памяти до самого завершения приложения, а хотелось бы, чтоб он уничтожался как только нет ни одного из SomeClass. Создаваться единственный SomeOtherClass должен, как только есть хотя бы один SomeClass. Есть тому стандартное решение или CRTP и указатель мне в руки?
Полсчет ссылок, ref counting вот что спасет отца русской демократии
Здравствуйте, -MyXa-, Вы писали:
MX>Это хорошо, если такой указатель один в классе, а если их несколько? Мы же не можем написать:
MX>А это уже, как мне кажется, паттерном пахнет.
"Папа, это вы сейчас с кем разговариваете?"
MX>А если мы захотим добавить ещё конструктор к SomeClass?
MX>А сколько ещё страшных историй есть!
У этих историй один конец — надо начинать думать
Оформи SomeClass (с одним static-ом) в виде шаблона и включай его экземляры в виде подобъектов в другие объекты.
Тут есть один нюанс, но — пора начинать думать самостоятельно!
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
MX>Вот только объект value болтается в памяти до самого завершения приложения, а хотелось бы, чтоб он уничтожался как только нет ни одного из SomeClass. Создаваться единственный SomeOtherClass должен, как только есть хотя бы один SomeClass. Есть тому стандартное решение или CRTP и указатель мне в руки?
MX>спасибо.
Поглядев на этот первоначальный вариант и то, что предлагалось потом, возникает вопрос: а стоит ли игра свеч? Зачем это нужно? Просто интересно.
Т.е. SomeOtherClass занимает очень много памяти, а экземпляры SomeClass существуют очень не продолжительный промежуток времени.
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;