Здравствуйте, Dj.ValDen, Вы писали:
DV>Вот в процессе интерессно стало, DV>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? DV> DV>IMHO — нет
Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Здравствуйте, Dj.ValDen, Вы писали:
DV>>Вот в процессе интерессно стало, DV>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? DV>> DV>>IMHO — нет
КД>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
Здравствуйте, Dj.ValDen, Вы писали:
DV>Вот в процессе интерессно стало, DV>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? DV> DV>IMHO — нет DV>А что скажет многоуважаемый All ?
Соответсвенно, примерно в том же процессе мне стало интересно: нужно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?
ИМХО, нет... Если уж тебе нужно, чтобы указатель был жив, то так и делай...
А смотреть на выданный тебе указатель, проверяя жив он или нет — это скорее ошибка проектирования
Здравствуйте, maikLa, Вы писали:
L>Здравствуйте, Dj.ValDen, Вы писали:
DV>>Вот в процессе интерессно стало, DV>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? DV>> DV>>IMHO — нет DV>>А что скажет многоуважаемый All ?
L>Соответсвенно, примерно в том же процессе мне стало интересно: L>нужно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? L>ИМХО, нет... Если уж тебе нужно, чтобы указатель был жив, то так и делай... L>А смотреть на выданный тебе указатель, проверяя жив он или нет — это скорее ошибка проектирования
Здравствуйте, Leasg, Вы писали:
DV>>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? КД>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет L>а если попробовать через _msize ?
Встречный вопрос — А оно переносимо
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Здравствуйте, Leasg, Вы писали:
DV>>>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? КД>>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет L>>а если попробовать через _msize ? КД>Встречный вопрос — А оно переносимо
Здравствуйте, Dj.ValDen, Вы писали:
DV>Вот в процессе интерессно стало, DV>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? DV> DV>IMHO — нет DV>А что скажет многоуважаемый All ?
Вот достаточное (не необходимое) условие проверки факта смерти (но не жизни) указателя:
SomeObj *val = new SomeObj;
// ...try
{
*val = SomeObj;
// Не факт что жив - может просто повезло...
}
catch(...)
{
// Точно сдох!!! :)))
}
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[2]: указатель
От:
Аноним
Дата:
20.05.04 08:53
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Здравствуйте, Dj.ValDen, Вы писали:
DV>>Вот в процессе интерессно стало, DV>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? DV>> DV>>IMHO — нет
КД>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
А может класс уже успели грохнуть и создать на том же самом месте заново?
Он жив или мёртв?
Здравствуйте, Mr. None, Вы писали:
MN>Здравствуйте, Dj.ValDen, Вы писали:
MN>Вот достаточное (не необходимое) условие проверки факта смерти (но не жизни) указателя:
MN>
MN>SomeObj *val = new SomeObj;
MN>// ...
MN>try
MN>{
MN> *val = SomeObj;
MN> // Не факт что жив - может просто повезло...
MN>}
MN>catch(...)
MN>{
MN> // Точно сдох!!! :)))
MN>}
MN>
1) При работе в кольце приоритетов 0 exception генерироваться не будет впринципе
2) Если SomeObj указывает на переменную в стэке или на блок алоцированный другим куском кода, тогда эта операция также не выдаст exception даже в Windows XP
Здравствуйте, Leasg, Вы писали:
L>1) При работе в кольце приоритетов 0 exception генерироваться не будет впринципе L>2) Если SomeObj указывает на переменную в стэке или на блок алоцированный другим куском кода, тогда эта операция также не выдаст exception даже в Windows XP L>
Я же сказал, что это достаточное условие, а не необходимое... То есть сли попали в catch(...) значит точно мёртв
А насчёт 1) и 2) я в курсе.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, Аноним, Вы писали:
DV>>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер? КД>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
А>А может класс уже успели грохнуть и создать на том же самом месте заново? А>Он жив или мёртв?
Все зависит от твоей религии
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Leasg, Вы писали:
КД>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
L>а если попробовать через _msize ?
А если этот блок уже повторно использован под другие нужды?
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Leasg, Вы писали:
КД>>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
L>>а если попробовать через _msize ?
К>А если этот блок уже повторно использован под другие нужды?
RTTI использовать
P.S.: Какова задача такие и решения
MN>Я же сказал, что это достаточное условие, а не необходимое... То есть сли попали в catch(...) значит точно мёртв
Тоже не верно. Оператор присваивания для класса запросто может сгенерировать исключение.
Здравствуйте, Vamp, Вы писали:
MN>>Я же сказал, что это достаточное условие, а не необходимое... То есть сли попали в catch(...) значит точно мёртв V>Тоже не верно. Оператор присваивания для класса запросто может сгенерировать исключение.
Согласен...
Тогда так:
SomeObj *val = new SomeObj;
//...try
{
char *ptr = reinterpret_cast<char*>(val);
for(int i = 0; i < sizeof(SomeObj); i++)
{
char test = ptr[i];
}
// Не факт что жив - может просто повезло...
}
catch(...)
{
// Точно сдох!!! :)))
}
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.