Pull to refresh

Comments 8

Спасибо, что обратили внимания. SafeHandle это тяжелая артиллерия. Но для полноты картины, наверное, стоит привести вариант с его использованием. Для этого шаблон ImplPtrBase надо наследовать от SafeHandle, и немного переписать его. Все остальное остается без изменений.

Как это — "без изменений", когда вместо деструктора и финализатора будет использоваться метод ReleaseHandle, а вместо поля T* ptr — поле базового класса IntPtr handle?

Все изменения инкапсулированы в шаблоне 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);
        }
    }
};

«Родные» классы и ресурсы — это что-то особенного!
<sarcasm>
Там ещё Google Translator предлагает «природные», «отечественные» и «туземные» жаль, что вы их не выбрали для перевода слова «native».
</sarcasm>
Всё-таки тут англицизм «нативные» более уместен и привычен, а потому меньше режет глаз.
Термин «родной», как перевод native, используется в переводе упомянутой книги Хогенсона, и, наверное, достаточно часто в других публикациях. Еще я встречал слово «собственный». Вообще, мнения по правильному переводу иногда переходит на уровень религиозных войн, возможно, я напишу когда-нибудь статью на эту тему.
Cерьёзно? Ну, значит, я отстал от прогресса… Книгу правда перевели больше десяти лет назад, но как-то она мимо меня прошла или, возможно, я её в оригинале читал. Пусть будут «родные», мне не жалко.
В переводе романа Microserves (Рабы майкрософт) герои разрабатывали «черезплатформенную графическую библиотеку»…
Я тоже за «нативный», как устоявшийся термин.
Sign up to leave a comment.

Articles