Как мне объявить динамический массив с помощью std :: auto_ptr? - PullRequest
4 голосов
/ 30 ноября 2011

Я пытаюсь объявить динамический массив int, как показано ниже:

int n;
int *pInt = new int[n];

Могу ли я сделать это с std::auto_ptr?

Я пробовал что-то вроде:

std::auto_ptr<int> pInt(new int[n]);

Но это не компилируется.

Мне интересно, могу ли я объявить динамический массив с auto_ptr конструкцией и как Спасибо!

Ответы [ 2 ]

8 голосов
/ 30 ноября 2011

Нет, вы не можете и не будете: C ++ 98 очень ограничен в отношении массивов, а auto_ptr - очень неловкий зверь, который часто не делает то, что вам нужно.

Вы можете:

  • используйте std::vector<int> / std::deque<int>, или std::array<int, 10>, или

  • используйте C ++ 11 и std::unique_ptr<int[]> p(new int[15]), или

  • используйте C ++ 11 и std::vector<std::unique_ptr<int>> (хотя это кажется слишком сложным для int).

Если размер массива известен во время компиляции, используйте один из статических контейнеров (array или указатель-уникального массива). Если вам нужно изменить размер во время выполнения, в основном используйте vector, но для больших классов вы также можете использовать вектор уникальных указателей.

std::unique_ptr - это то, что std::auto_ptr хотел, но не смог из-за ограничений языка.

0 голосов
/ 30 ноября 2011

Вы не можете. std::auto_ptr не может обрабатывать динамические массивы, поскольку перераспределение отличается (delete против delete[]).

Но мне интересно, в чем может быть ошибка компиляции ...

...