Нет, нет, нет. Для этого вы используете RAII - он безопасен для исключений.
По сути, когда объект пользовательского типа выходит из области видимости в C ++, он вызывает специальную функцию (называемую деструктором). Это используется для очистки всех ресурсов. Он применяется автоматически и, в действительности, вызывается во всех сценариях, в которых ваша программа может продолжаться разумно, а в некоторых случаях он не может.
Это означает, что вам никогда не нужно освобождать память, созданную пользовательским типом - она должна освобождаться сама. Вам не нужно будет освобождать память, выделенную ни std :: string, ни std :: stringstream. std :: string :: end () об окончании итерации. Как правило, для любых ресурсов, требующих пользовательского освобождения, вы оборачиваете их в пользовательский тип, чтобы они больше не требовали ручного освобождения.
Для пользовательских типов, выделенных с помощью new, вы можете использовать auto_ptr, который немедленно уничтожает объект, когда он выходит из области видимости и освобождает память, или вы можете использовать shared_ptr, который «разделяет» объект между всеми экземплярами, которые указывают на него с помощью магии. Существуют другие типы интеллектуальных указателей, и для любого конкретного ресурса вы можете написать свой собственный тип управления. Это значительно повышает безопасность вашей программы без потери производительности.
Кроме того, вы никогда и никогда не должны использовать char * или любые другие связанные типы (char [] и т. Д.) Для хранения строк в C ++. Используйте std :: string. Ваш текущий код не поддерживается, так как он умрет или может вызвать случайные ошибки, если вам нужно более 7 символов. Строковые функции в стиле C (strcpy) также крайне устарели и не должны использоваться.
(конечно, есть исключения из каждого правила, но строки в стиле C, вы должны быть очень продвинуты, чтобы правильно использовать их преимущества).
Общее правило: если вы когда-либо вызываете функцию, которая освобождает ресурс вне деструктора, вы почти наверняка написали свою программу неправильно.