Кроме того, рассмотрите возможность использования boost::shared_ptr<>
из библиотек Boost. Это величайшая вещь со времен нарезанного хлеба.
typedef boost::shared_ptr<TypeX> StrRef;
foo() {
StrRef pointer1(new TypeX);
while(something) {
StrRef pointer2 = pointer1;
// do stuff
}
return;
}
Данные (TypeX
) будут удалены, когда последний указатель на них выйдет из области видимости. Вы можете сделать что-то подобное со встроенным типом auto_ptr<>
, если вам не нужен счетчик ссылок:
typedef auto_ptr<TypeX> StrRef;
foo() {
StrRef pointer1(new TypeX);
while(something) {
TypeX * pointer2 = pointer1.get();
subroutine(pointer2);
if (condition) return;
}
return;
}
Всякий раз, когда pointer1
выходит из области видимости, он удаляет данные. Преимущество этого заключается в том, что вам не нужно помнить, что вы должны поместить delete перед оператором return внизу, и если pointer1
выходит из области видимости по какой-либо другой причине (т.е. возврат из середины цикла или subroutine()
выдает исключение, тогда данные все равно будут правильно освобождены.
Я не проверял этот код, поэтому вам придется самостоятельно проверять документы на auto_ptr<>
и boost::shared_ptr<>
.
Я настоятельно рекомендую максимально использовать библиотеки Boost. Это написано профессионалами, это в основном промежуточная область для расширений до C ++.