Освобождение ресурсов на языке D

При использовании Direct3D в c ++ я могу написать, например, класс «Cube», содержащий «ID3D11Buffer * vertexBuffer_», и убедиться, что деструктор для этого объекта Cube вызывает vertexBuffer _-> Release ().

У меня может быть класс «Сцена», содержащий объект «unique_ptr cube_». Так что я знаю, что когда я удаляю свою сцену, куб будет удален, и это, следовательно, вызовет освобождение ресурсов D3D, которые он использует.

In D Я не могу этого сделать. Я могу писать деструкторы, но понятия не имею, когда они будут вызваны. Если GC не требует памяти, они могут никогда не быть вызваны ...

Итак, как лучше всего справляться с подобными вещами в D? Я мог бы добавить функцию-член «Free» к каждому из объектов, которая освобождает все его собственные ресурсы и вызывает «Free» для любых объектов, которыми он владеет, но это кажется подверженным ошибкам ручным управлением и шагом назад от C ++.

Есть ли лучший способ справиться с подобными проблемами в D?

8
задан jcoder 23 February 2012 в 10:03
поделиться