Гарантия инициализации записи стека

Я хочу исправить недостаток дизайна в записи TMyValue, которая используется в течение многих лет, и я отчаянно хочу исправить его в самой записи - чтобы избежать изменения открытого интерфейса - и не требовать изменения кода с помощью записи.

по сути, недостаток заключается в том, что TMyValue должен быть инициализирован до нуля при его создании, иначе вызов метода Clear на нем может вызвать сбой. Это потому, что он содержит поле, которое является указателем на динамически выделенную память если указатель не равен нулю, а Clear освобождает динамическую память.

это проблема, если TMyValue создается в стеке, потому что переменные стека не обнуляются автоматически при их создании.

Я думал, что могу использовать конструктор записей для обнуления записи, но конструкторы записей не могут быть без параметров. Предположительно это означает, что нельзя принудительно выполнить конструктор записи автоматически при создании записи на стек.

Я подозреваю, что ответ на мой вопрос - "это невозможно". Пожалуйста, докажи, что я ошибаюсь!

1 ответов


добавьте фиктивный элемент строки в свою запись. Поскольку строка является управляемым типом, она будет инициализирована пустой строкой, когда запись войдет в область.

поэтому при вызове метода Clear сначала проверьте, пуста ли фиктивная строка. Установите для строки значение, соответствующее логике использования, чтобы пометить Запись Как инициализированную.