Есть ли смысл создавать динамический указатель на не массив?
Я не понимаю, есть ли смысл создавать динамический указатель на не массив. То есть смысл кода ниже понятен.
unique_ptr<int[]>ptr = make_unique<int[]>(2);
Но есть ли смысл в этом :
unique_ptr<int>ptr = make_unique<int>(2);
Ответы (2 шт):
В вашем случае и в первом примере нет смысла. Он появляется если размер массива вычисляется во время выполнения, или такой большой что в стек не влезает.
Причины класть не-массив в кучу тоже есть:
Опять же, он слишком большой и не влезает в стек.
Зачем-то нужна стабильность адреса (когда указатель куда-перемещают). Но тогда чаще используют
std::shared_ptr
.Нужно точно контролировать, когда объект уничтожается, например если он должен пережить текущую функцию.
Я согласен с мнением @HolyBlackCat. Хочу еще добавить: можно динамически выделять память под объекты очень тяжелых классов (чаще всего, эти классы пользовательские).
//...
class VeryHardClass {
public:
//...
private:
// К примеру, не советую так делать
int m_array[1024];
};
//...
std::unique_ptr<VeryHardClass>(new VeryHardClass);