std::auto_ptr
является устаревшим и удален из стандартной библиотеки начиная со стандарта C++17.
Вместо него стоит
пользоваться std::unique_ptr
.
std::auto_ptr
мог следить только за памятью одного экземпляра. Передать туда память массива можно, но деструктор будет вызван только у первого экземпляра массива. В общем смысле это означает утечку памяти.
std::unique_ptr
, наоборот, способен контролировать память как единичного экземпляра, так и массива экземпляров. Еще в отличии от своего устаревшего товарища,
std::unique_ptr
способен спокойно передавать свое состояние, не создавая возможность двойного освобождения памяти. В дополнение,
std::unique_ptr
еще способен пользоваться нестандартными деструкторами, что очень кстати при работе, например, с COM-объектами или нестандартной схемой аллокации памяти.
Любой умный указатель является обычным объектом своего типа. Все объекты всех типов имеют свое
время жизни, согласно условиям своего конструирования.
Умные указатели разрушаются тогда, когда завершается их время жизни. Для умных указателей в глобальном пространстве время жизни завершается сразу
после выхода из
main
.
В языке нет термина "обычный массив", этот вопрос непонятен.