Есть ли смысл создавать динамический указатель на не массив?

Я не понимаю, есть ли смысл создавать динамический указатель на не массив. То есть смысл кода ниже понятен.

unique_ptr<int[]>ptr = make_unique<int[]>(2); 

Но есть ли смысл в этом :

unique_ptr<int>ptr = make_unique<int>(2);

Ответы (2 шт):

Автор решения: HolyBlackCat

В вашем случае и в первом примере нет смысла. Он появляется если размер массива вычисляется во время выполнения, или такой большой что в стек не влезает.

Причины класть не-массив в кучу тоже есть:

  • Опять же, он слишком большой и не влезает в стек.

  • Зачем-то нужна стабильность адреса (когда указатель куда-перемещают). Но тогда чаще используют std::shared_ptr.

  • Нужно точно контролировать, когда объект уничтожается, например если он должен пережить текущую функцию.

→ Ссылка
Автор решения: Damir Hakimof

Я согласен с мнением @HolyBlackCat. Хочу еще добавить: можно динамически выделять память под объекты очень тяжелых классов (чаще всего, эти классы пользовательские).

//...
class VeryHardClass {
public:
    //...
private:
    // К примеру, не советую так делать
    int m_array[1024];
};
//...
std::unique_ptr<VeryHardClass>(new VeryHardClass);
→ Ссылка