Вы правы, что auto_ptr не работает для массивов. Когда он уничтожает принадлежащий ему объект, он использует delete object;
, поэтому, если вы используете new objects[whatever];
, вы получите неопределенное поведение. Возможно, чуть более тонко, auto_ptr
не соответствует требованиям «Копируемого» (как стандарт определяет термин), поэтому вы не можете создать контейнер (вектор, deque, list и т. Д.) Из auto_ptr
.
A shared_ptr
также для отдельного объекта. Это для ситуации, когда вы имеете общее право собственности и вам нужно удалять объект только тогда, когда все владельцы выходят из области видимости. Если что-то не происходит, о чем вы нам не рассказали, велика вероятность, что это тоже не очень хорошо соответствует вашим требованиям.
Возможно, вы захотите взглянуть на еще один новый для вас класс: Boost ptr_vector . По крайней мере, исходя из того, что вы сказали, кажется, что он соответствует вашим требованиям лучше, чем auto_ptr
или shared_ptr
.