Если вы планируете возвращать необработанные указатели из функции, вы должны четко указать в документации, на которой лежит ответственность за удаление указателя, т. Е. Кто владеет им. В этом случае вы должны явно указать, что владение указателем передается вызывающей стороне, которая отвечает за delete
it.
Хотя многие в порядке, просто указав владельца в документации, часто лучше применять эту политику в коде. В частности, для этого часто используются умные указатели : текущий стандарт C ++ предоставляет умный указатель std::auto_ptr
, который передает право собственности на копию, т.е. когда вы возвращаете его вызывающей стороне, вы передаете право собственности на цель std::auto_ptr
. Обратите внимание, что std::auto_ptr
автоматически delete
указывает на уничтожение памяти, если она все еще владеет ею. Предстоящий стандарт C ++ предоставляет std::unique_ptr
, который работает аналогичным образом, но с использованием семантики перемещения.
К сожалению, std::auto_ptr
не предназначен для массивов (которым нужно delete []
вместо delete
), поэтому вы не можете использовать его для своих целей. Я думаю, что решение не включать auto_ptr
для массивов было принято намеренно, поскольку STL уже предоставляет все контейнеры, которые могут вам понадобиться, если вам нужно вернуть коллекцию элементов, которые обрабатывают свои собственные средства управления памятью и копируют.
В частности, для строк вы должны просто использовать std::string
и полностью забыть о таких проблемах с управлением памятью и владением указателем.