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