Метод RAII использует эту функцию автоматического управления объектами для обработки объектов, созданных в куче / свободном хранилище, явно запрашивая дополнительную память, используя new / new [], которая должна быть явно уничтожена вызовом delete / delete [] , Класс автоматически управляемого объекта обернет этот другой объект, созданный в памяти heap / free-store. Следовательно, когда запускается конструктор автоматически управляемого объекта, обернутый объект создается в памяти кучи / свободного хранилища, а когда дескриптор автоматически управляемого объекта выходит из области видимости, автоматически вызывается деструктор этого автоматически управляемого объекта, в который переносится объект объект уничтожен с помощью delete. С концепциями ООП, если вы поместите такие объекты в другой класс в закрытой области видимости, у вас не будет доступа к обернутым классам-членам и методам, и это причина, по которой предназначены интеллектуальные указатели (иначе говоря, классы-дескрипторы). Эти интеллектуальные указатели представляют обернутый объект как типизированный объект для внешнего мира, позволяя вызывать любые элементы / методы, из которых состоит открытый объект памяти. Обратите внимание, что умные указатели имеют различные вкусы в зависимости от потребностей. Чтобы узнать больше об этом, вам следует обратиться к программированию на современном C ++ Андрея Александреску или повысить уровень реализации (документации) библиотеки (www.boostorg) shared_ptr.hpp. Надеюсь, это поможет вам понять RAII.

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

I делать знаю немного. Я считаю, что это означает «Приобретение ресурсов - это инициализация». Однако это имя не соответствует моему (возможно, неправильному) пониманию того, что такое RAII: у меня складывается впечатление, что RAII - это способ инициализации объектов в стеке, так что, когда эти переменные выходят из области видимости, деструкторы автоматически быть вызванным, чтобы очистить ресурсы.

Так почему же это не называется «использование стека для запуска очистки» (UTSTTC :)? Как ты добираешься оттуда до "RAII"?

И как вы можете сделать что-то в стеке, что приведет к очистке чего-то, что живет в куче? Кроме того, есть ли случаи, когда вы не можете использовать RAII? Вы когда-нибудь мечтали собрать мусор? По крайней мере, сборщик мусора, который вы могли бы использовать для некоторых объектов, позволяя управлять другими?

Благодарю.

Ответы на вопрос(11)

Ваш ответ на вопрос