Если вы имеете в виду, нужно ли вам в исходном коде столько же экземпляров delete
, сколько экземпляров new
, тогда нет. Вы можете иметь объекты new
в нескольких местах, но все эти объекты delete
d должны быть в одной строке кода. На самом деле это обычная идиома.
Интеллектуальные указатели разных типов, как правило, принимают много разных объектов new
, редактируемых во многих местах кода пользователя, и delete
их из одного места в коде библиотеки.
Редактировать
Технически, каждый успешный вызов выделения памяти должен быть сопоставлен с вызовом делокации, который берет возвращенный указатель из исходного вызова выделения.
Большинство new
выражений приводят к вызову operator new
, который выделяет память и создает объект во вновь выделенной памяти. Использование выражения delete
уничтожает объект и вызывает вызов operator delete
, который должен освободить выделенную память.
Появились новые выражения, которые конструируют объекты в заранее выделенной памяти (размещение new
). Эти не должны совпадать с выражением удаления, но может потребоваться освободить предварительно выделенную память таким образом, чтобы это соответствовало исходному выделению.