При использовании Direct3D в c ++ я могу написать, например, класс «Cube», содержащий «ID3D11Buffer * vertexBuffer_», и убедиться, что деструктор для этого объекта Cube вызывает vertexBuffer _-> Release ().
У меня может быть класс «Сцена», содержащий объект «unique_ptr cube_». Так что я знаю, что когда я удаляю свою сцену, куб будет удален, и это, следовательно, вызовет освобождение ресурсов D3D, которые он использует.
In D Я не могу этого сделать. Я могу писать деструкторы, но понятия не имею, когда они будут вызваны. Если GC не требует памяти, они могут никогда не быть вызваны ...
Итак, как лучше всего справляться с подобными вещами в D? Я мог бы добавить функцию-член «Free» к каждому из объектов, которая освобождает все его собственные ресурсы и вызывает «Free» для любых объектов, которыми он владеет, но это кажется подверженным ошибкам ручным управлением и шагом назад от C ++.
Есть ли лучший способ справиться с подобными проблемами в D?