указатель
От: Dj.ValDen Украина http://ua.linkedin.com/in/dvalchuk
Дата: 20.05.04 06:10
Оценка:
Вот в процессе интерессно стало,
Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?

IMHO — нет
А что скажет многоуважаемый All ?
С уважением Denys Valchuk

IMHO чем больше мнений тем оптимальней выбор варианта... :)
Re: указатель
От: Аноним  
Дата: 20.05.04 06:14
Оценка:
Нельзя
Re: указатель
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 20.05.04 06:16
Оценка:
Здравствуйте, Dj.ValDen, Вы писали:

DV>Вот в процессе интерессно стало,

DV>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?
DV>
DV>IMHO — нет

Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: указатель
От: Leasg  
Дата: 20.05.04 07:38
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Здравствуйте, Dj.ValDen, Вы писали:


DV>>Вот в процессе интерессно стало,

DV>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?
DV>>
DV>>IMHO — нет

КД>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет


а если попробовать через _msize ?
Re: указатель
От: maikLa Россия  
Дата: 20.05.04 07:51
Оценка: +2
Здравствуйте, Dj.ValDen, Вы писали:

DV>Вот в процессе интерессно стало,

DV>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?
DV>
DV>IMHO — нет
DV>А что скажет многоуважаемый All ?

Соответсвенно, примерно в том же процессе мне стало интересно:
нужно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?
ИМХО, нет... Если уж тебе нужно, чтобы указатель был жив, то так и делай...
А смотреть на выданный тебе указатель, проверяя жив он или нет — это скорее ошибка проектирования
Re[2]: указатель
От: Denwer Россия  
Дата: 20.05.04 07:53
Оценка:
Здравствуйте, maikLa, Вы писали:

L>Здравствуйте, Dj.ValDen, Вы писали:


DV>>Вот в процессе интерессно стало,

DV>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?
DV>>
DV>>IMHO — нет
DV>>А что скажет многоуважаемый All ?

L>Соответсвенно, примерно в том же процессе мне стало интересно:

L>нужно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?
L>ИМХО, нет... Если уж тебе нужно, чтобы указатель был жив, то так и делай...
L>А смотреть на выданный тебе указатель, проверяя жив он или нет — это скорее ошибка проектирования

Скорее ошибка программирования.
Re[3]: указатель
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 20.05.04 07:54
Оценка:
Здравствуйте, Leasg, Вы писали:

DV>>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?

КД>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
L>а если попробовать через _msize ?
Встречный вопрос — А оно переносимо
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[4]: указатель
От: Leasg  
Дата: 20.05.04 07:55
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Здравствуйте, Leasg, Вы писали:


DV>>>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?

КД>>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет
L>>а если попробовать через _msize ?
КД>Встречный вопрос — А оно переносимо

Думаю нет
Re: указатель
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 20.05.04 08:50
Оценка: :)))
Здравствуйте, 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 — нет

КД>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет


А может класс уже успели грохнуть и создать на том же самом месте заново?
Он жив или мёртв?
Re[2]: указатель
От: Leasg  
Дата: 20.05.04 08:54
Оценка:
Здравствуйте, 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
Re[3]: указатель
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 20.05.04 09:00
Оценка:
Здравствуйте, Leasg, Вы писали:

L>1) При работе в кольце приоритетов 0 exception генерироваться не будет впринципе

L>2) Если SomeObj указывает на переменную в стэке или на блок алоцированный другим куском кода, тогда эта операция также не выдаст exception даже в Windows XP
L>

Я же сказал, что это достаточное условие, а не необходимое... То есть сли попали в catch(...) значит точно мёртв
А насчёт 1) и 2) я в курсе.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[3]: указатель
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 20.05.04 09:13
Оценка: :)))
Здравствуйте, Аноним, Вы писали:

DV>>>Можно ли по указателю на экземпляр класса узнать жив он ещё или уже умер?

КД>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет

А>А может класс уже успели грохнуть и создать на том же самом месте заново?

А>Он жив или мёртв?

Все зависит от твоей религии
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[3]: указатель
От: Кодт Россия  
Дата: 20.05.04 10:02
Оценка:
Здравствуйте, Leasg, Вы писали:

КД>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет


L>а если попробовать через _msize ?


А если этот блок уже повторно использован под другие нужды?
Перекуём баги на фичи!
Re[4]: указатель
От: Leasg  
Дата: 20.05.04 10:06
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Leasg, Вы писали:


КД>>>Если экземпляры класса размещаются в специализованной куче, через интерфейс которой можно узнать состояние участка памяти, то почему бы и нет


L>>а если попробовать через _msize ?


К>А если этот блок уже повторно использован под другие нужды?


RTTI использовать
P.S.: Какова задача такие и решения
Re[4]: указатель
От: Vamp Россия  
Дата: 20.05.04 10:09
Оценка:
MN>Я же сказал, что это достаточное условие, а не необходимое... То есть сли попали в catch(...) значит точно мёртв
Тоже не верно. Оператор присваивания для класса запросто может сгенерировать исключение.
Да здравствует мыло душистое и веревка пушистая.
Re[5]: указатель
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 20.05.04 10:17
Оценка:
Здравствуйте, 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(...)
{
    // Точно сдох!!!   :)))
}
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[5]: указатель
От: Кодт Россия  
Дата: 20.05.04 11:14
Оценка:
Здравствуйте, Leasg, Вы писали:

К>>А если этот блок уже повторно использован под другие нужды?


L>RTTI использовать


Там не RTTI, а злостное UB.
Перекуём баги на фичи!
Re[6]: указатель
От: achp  
Дата: 20.05.04 11:25
Оценка: :))
Здравствуйте, Кодт, Вы писали:

К>Там не RTTI, а злостное UB.


Ну вот, его и использовать!
Re[6]: указатель
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 20.05.04 11:59
Оценка:
Здравствуйте, Кодт, Вы писали:

К>>>А если этот блок уже повторно использован под другие нужды?


L>>RTTI использовать


К>Там не RTTI, а злостное UB.


Простите меня неграммотного , а что это такое ? Это цензурно?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.