Комментарии 8
Но все-таки, почему не SafeHandle?
0
Спасибо, что обратили внимания. SafeHandle это тяжелая артиллерия. Но для полноты картины, наверное, стоит привести вариант с его использованием. Для этого шаблон ImplPtrBase надо наследовать от SafeHandle, и немного переписать его. Все остальное остается без изменений.
0
Как это — "без изменений", когда вместо деструктора и финализатора будет использоваться метод ReleaseHandle, а вместо поля T* ptr
— поле базового класса IntPtr handle
?
0
Все изменения инкапсулированы в шаблоне ImplPtrBase. Вот немного упрощенный вариант (без удалителя):
using SH = System::Runtime::InteropServices::SafeHandle;
using PtrType = System::IntPtr;
template <typename T>
public ref class ImplPtrBase : SH
{
protected:
ImplPtrBase(T* p) : SH(PtrType::Zero, true)
{
handle = PtrType(p);
}
T* Ptr() { return static_cast<T*>(handle.ToPointer()); }
bool ReleaseHandle() override
{
delete Ptr();
return true;
}
public:
property bool IsInvalid
{
bool get() override
{
return (handle == PtrType::Zero);
}
}
};
0
«Родные» классы и ресурсы — это что-то особенного!
<sarcasm>
Там ещё Google Translator предлагает «природные», «отечественные» и «туземные» жаль, что вы их не выбрали для перевода слова «native».
</sarcasm>
Всё-таки тут англицизм «нативные» более уместен и привычен, а потому меньше режет глаз.
<sarcasm>
Там ещё Google Translator предлагает «природные», «отечественные» и «туземные» жаль, что вы их не выбрали для перевода слова «native».
</sarcasm>
Всё-таки тут англицизм «нативные» более уместен и привычен, а потому меньше режет глаз.
0
Термин «родной», как перевод native, используется в переводе упомянутой книги Хогенсона, и, наверное, достаточно часто в других публикациях. Еще я встречал слово «собственный». Вообще, мнения по правильному переводу иногда переходит на уровень религиозных войн, возможно, я напишу когда-нибудь статью на эту тему.
0
Cерьёзно? Ну, значит, я отстал от прогресса… Книгу правда перевели больше десяти лет назад, но как-то она мимо меня прошла или, возможно, я её в оригинале читал. Пусть будут «родные», мне не жалко.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разработка классов-дескрипторов на C++/CLI