Здравствуйте, indee, Вы писали:
I>Нужно получит экземпляра объекта по его адресу:
Платформа какая?
Если 64-битная винда, то указатель — 64 бита, а long — 32 (не спрашивай почему они такие извращенцы, когда даже в дотнете long — 64).
Тебе нужен uintptr_t, а не long.
Но в общем случае такие пляски нужны только в особых случаях, типа передачи через WinAPI. А зачем в обычном коде приводить указатель к целому?
I>Правильно ли это, как это можно улучшить/обезопасить и правильно обвернуть MyObj* pObj = (MyObj*)p в try-catch?
Тут оборачивать не надо, если исходное значение было правильным указателем. А вот если нет причины ему доверять — то нельзя доверять и указателю без проверки.
А так уже сказали — указатель на объект базового класса решает >=90% подобных проблем.