TestClass *test = new TestClass();
Вы используете
new
, который создает динамически выделенный объект (скорее всего, помещенный в кучу). Этот тип ресурсов должен быть вручную управляемым вами. Управляя, вы должны использоватьdelete
на нем после того, как вы это сделаете.{ TestClass *test = new TestClass(); // do something delete test; }
Но для большинства ваших целей и намерений вам просто нужно использовать объекты автоматического хранения, которые освобождают вам необходимо вручную управлять объектом. Это также, скорее всего, будет иметь лучшую производительность, особенно в короткоживущих объектах. Вы всегда должны использовать их, если у вас нет повода для этого.
{ TestClass test; // do something }
Однако, если вам нужна семантика динамически выделенных объектов или указателей, это всегда будет лучше использовать какой-либо механизм для инкапсуляции удаления / освобождения объекта / ресурса для вас, что также обеспечивает дополнительную безопасность, особенно когда вы используете исключения и условные ветви. В вашем случае было бы лучше использовать
std::unique_ptr
.{ std::unique_ptr
test(new TestClass()); // auto test = std::make_unique (); in C++14 // do something (maybe you want to pass ownership of the pointer) } Ниже приведена соответствующая ссылка, которая поможет вам решить, использовать ли автоматические объекты хранения или динамически выделенные объекты: Почему программисты на С ++ сводят к минимуму использование «нового»?