Когда удалять в D? - PullRequest
       35

Когда удалять в D?

11 голосов
/ 04 января 2011

Я изучаю D с 8 лет на C ++.У меня вопрос по поводу сборки мусора D - когда я использую delete, а когда нет необходимости?

Ответы [ 2 ]

14 голосов
/ 04 января 2011

Ты не. Удалить не следует использовать с D-версией 2, и оно предназначено для удаления из языка. Что за задержка, я не уверен. Вместо этого вы используете функцию destroy (объект), которая вызывает деструктор, где вы можете освободить ресурсы, которые не являются памятью GC. Деструктор будет вызван снова во время сбора GC объектов собственной памяти. Это объясняется в " Языке программирования D ".

Идея состоит в том, чтобы вернуть ресурсы раньше, чем то, что мог бы предоставить GC, и предотвратить повреждение памяти от висячих указателей. Чтобы быть менее безопасным, модуль core.memory предоставляет GC.free (объект), который можно использовать для освобождения памяти после вызова destroy (объект).

Поскольку я не программист на C ++, я действительно не знаю шаблон RAII, но это и подсчет ссылок - ожидаемая стратегия, если вы хотите избежать GC.

10 голосов
/ 04 января 2011

Взгляните на Сборка мусора в документации D. Как уже отмечалось, (почти) никогда не нужно явно управлять памятью. Конечно, потратив несколько пулевых точек, пытаясь убедить вас в силе GC, они включают несколько сценариев, когда сборка мусора не дотягивает. Чтобы устранить эти недостатки (они называют их ограничениями), Digital Mars предлагает советы для Управление памятью .

Если возможно, пусть сборщик мусора D сделает свое дело. Игнорировать явное управление памятью. В некоторых очень специфических сценариях существует вероятность недопустимой паузы или памяти GC, которую невозможно восстановить. Если ваше приложение включает один из этих сценариев (тестирование и профиль, чтобы доказать это), изолируйте причину проблемы и явно управляйте памятью, где это необходимо. D позволяет начать как оптимист. Если что-то не работает идеально, обнадеживает то, что вы можете прибегнуть к явному управлению памятью.

...