Я изучаю D с 8 лет на С++. Мой вопрос касается сбора мусора D - когда я использую delete, а когда мне не нужно?
Когда удалять в D?
Ответ 1
Нет. Удалить не должно использоваться с версией D версии 2 и предназначено для удаления с языка. Что задержка, я не уверен. Вместо этого вы используете функцию destroy (объект), которая вызывает деструктор, где вы можете освободить ресурсы, которые не являются памятью GC. Деструктор будет вызван снова во время сбора GC собственной памяти объектов. Это объясняется в "" Язык программирования D".
Идея состоит в том, чтобы вернуть ресурсы раньше, чем обеспечит GC, и предотвратит повреждение памяти от оборванных указателей. Чтобы быть менее безопасным, модуль core.memory предоставляет GC.free(объект), который можно использовать для освобождения памяти после вызова destroy (object).
Поскольку я не программист на С++, я действительно не знаю шаблон RAII, но это и подсчет ссылок являются ожидаемой стратегией, если вы хотите избежать GC.
Ответ 2
Посмотрите сбор мусора в документации D. Как уже отмечалось, практически невозможно явно управлять памятью. Конечно, потратив несколько пулевых точек, пытаясь убедить вас в мощности GC, они включают в себя несколько сценариев, когда сбор мусора падает. Чтобы устранить эти короткие падения (они называют их ограничениями), Digital Mars предлагает советы для "Управление памятью" .
Если возможно, пусть сборщик мусора D сделает все возможное. Игнорировать явное управление памятью. В нескольких очень специфических сценариях существует потенциальная возможность неприемлемой паузы GC или памяти, которая не может быть восстановлена. Если ваше приложение включает один из этих сценариев (тест и профиль для его подтверждения), изолируйте причину проблемы и, при необходимости, явным образом управляйте памятью. D позволяет вам начинать как оптимист. Если что-то не получится отлично, это успокаивает, что вы можете отказаться от явного управления памятью.