Освобождение вектора STL - PullRequest
       5

Освобождение вектора STL

2 голосов
/ 21 января 2011

Учитывая STL vector указателей, каждый элемент должен быть освобожден перед уничтожением самого vector. Есть ли какие-либо технические последствия, которые мешают библиотеке STL делать это автоматически?

Спасибо

Ответы [ 3 ]

5 голосов
/ 21 января 2011

Причина, по которой STL не делает этого за вас, заключается в том, что он не может знать, должен ли он или нет.У вас может быть вектор указателей на массивы (в этом случае он должен делать delete[]), указателей на обычные объекты (в этом случае он должен будет делать delete) или, возможно, память из какого-то пользовательского распределителя.Эти указатели могут также использоваться совместно с некоторыми другими объектами, и в этом случае их удаление приведет к тому, что эти другие объекты будут указывать на данные мусора, что приведет к неопределенному поведению.Этими указателями могут быть также выделенная стеком память, и в этом случае освобождение не требуется.

2 голосов
/ 21 января 2011

Если вектор содержит указатели, это не означает, что указатели указывают на динамическую память. И если они это сделают, должны ли delete или delete[] применяться к каждому указателю? А что, если указатели указывают на объекты, созданные с использованием размещения new? На все эти вопросы должен отвечать программист, а не библиотека.

2 голосов
/ 21 января 2011

вы можете хранить там указатели, которые не должны быть удалены при разрушении вектора

использовать вектор умного указателя (например, boost :: shared_ptr) для получения автоматического освобождения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...