заявления правильно.

римечательныйвидео (Хватит учить С) об этой смене парадигмы при обучении языку с ++.

И также заметный пост в блоге

У меня есть мечта ...

Я мечтаю о том, что так называемые C ++ курсы / классы / учебные программы прекратят преподавать (требуя), чтобы их студенты использовали: ...

Начиная с C ++ 11 в качестве установленного стандарта мы имеемДинамическое управление памятью объекты акаумные указатели.
Даже из более ранних стандартов у нас есть стандарт C ++Библиотека контейнеров в качестве хорошей замены для сырых массивов (выделяется сnew T[]) (особенно использованиеstd::string вместо с-стиляNUL прерванные массивы символов).

Вопрос (ы) вжирный:

Оставьте в стороне размещениеnew переопределения,есть ли действительный вариант использования, который не может быть достигнут с помощью умных указателей или стандартных контейнеров, а только с использованиемnew а такжеdelete непосредственно (кроме реализации таких классов контейнера / умного указателя, конечно)?

ИногдаХодят слухи (любитьВот или жеВот) что с помощьюnew а такжеdelete Ручной может быть"более эффективным" для определенных случаев.Что это на самом деле? Разве этим крайним случаям не нужно отслеживать распределение так же, как это делают стандартные контейнеры или умные указатели?

Почти то же самое для необработанных массивов фиксированного размера в стиле c:std::array в настоящее время, что позволяет всем видам присваивать, копировать, ссылаться и т. д. легко и синтаксически согласованно, как ожидается всеми.Есть ли варианты использования, чтобы выбратьT myArray[N]; С-стиль массива в предпочтенииstd::array<T,N> myArray;?

Что касается взаимодействия со сторонними библиотеками:

Предполагается, что сторонняя библиотека возвращает необработанные указатели, выделенныеnew любить

MyType* LibApi::CreateNewType() {
    return new MyType(someParams);
}

Вы всегда можете связать это с умным указателем, чтобы гарантировать, чтоdelete называется:

std::unique_ptr<MyType> foo = LibApi::CreateNewType();

даже если API требует, чтобы вы вызвали их унаследованную функцию, чтобы освободить ресурс, такой как

void LibApi::FreeMyType(MyType* foo);

вы все еще можете предоставить функцию удаления:

std::unique_ptr<MyType, LibApi::FreeMyType> foo = LibApi::CreateNewType();

Я особенно заинтересован в действительном"ежедневно" случаи использования в отличие отакадемическая / образовательная цель требования и ограничения, на которые не распространяются указанные стандартные средства.
Этоnew а такжеdelete может использоваться в системах управления памятью / сборщиком мусора, или о стандартной реализации контейнера не может быть и речи1.

Одна главная мотивация ...

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

Их часто называютосновы управления памятью, что IMO явно неправильно / неправильно понял как подходящий дляначинающих лекции и задания.

1)Добавлять.: Что касается этого пункта, это должно быть четким показателем того, чтоnew а такжеdelete не для начинающих студентов C ++, но следует оставить для более продвинутых курсов.

Ответы на вопрос(19)

Ваш ответ на вопрос