Имеет ли С++ 11 оболочки для динамически распределенных массивов, таких как Boost scoped_array?
Мне часто приходится иметь дело с динамически распределенными массивами на С++ и, следовательно, полагаться на Boost для scoped_array, shared_array и т.п. После прочтения Stroustrup С++ 11 FAQ и С++ 11 Reference Wiki, я не смог найти подходящую замену для этих динамических массивных оболочек, которые предоставляются стандартом С++ 11. Есть ли что-то, что я упустил, или мне нужно продолжать полагаться на Boost?
Большое спасибо за вашу помощь!
Ответы
Ответ 1
Существует специализация unique_ptr
, например unique_ptr<T[]>
.
#include <iostream>
#include <memory>
struct test
{
~test() { std::cout << "test::dtor" << std::endl; }
};
int main()
{
std::unique_ptr<test[]> array(new test[3]);
}
Когда вы запустите его, вы получите это сообщение.
test::dtor
test::dtor
test::dtor
Если вы хотите использовать shared_ptr
, вы должны использовать std::default_delete<T[]>
для deleter, так как у него нет одного типа shared_ptr<t[]>
.
std::shared_ptr<test> array(new test[3], std::default_delete<test[]>());
Ответ 2
Насколько векторы предназначены в качестве оберток массивов, что делать, если вы используете любой подходящий смарт-указатель с вектором в качестве внутреннего объекта?