Вы не используете смарт-указатель и не используете явный delete
, поэтому объект ob2
будет иметь утечку.
Если, однако, вы используете смарт-указатель, он будеточищаться, когда он покидает область видимости:
{
std::unique_ptr<abc> ob2( new abc() );
}
unique_ptr автоматически вызовет delete
для «собственного» объекта, когда ob2
покидает область видимости.
OfКонечно, вы должны действительно использовать make_unique
вместо явного вызова new
, и это также хорошее место для использования C ++ 11 auto
:
{
auto ob2 = make_unique<abc>();
}
См. Умные указатели (Современный C ++)
В целом, в Modern C ++ вам не следует явно вызывать delete
в большинстве случаев.См. C ++ Core Guidelines и, в частности:
C.149: Используйте unique_ptr или shared_ptr, чтобы не забывать удалять объекты, созданные с использованием новых
R.11: Избегать вызова новых и удалять явно
ES.60: Избегать новых и удалять внешние функции управления ресурсами