Конечно. Если вы создаете объект, который существует вне области действия, в которой вы его используете. Вот надуманный пример (имейте в виду, что мой синтаксис будет отключен; мой C ржавый, но этот пример все еще иллюстрирует концепцию):
class MyClass
{
SomeOtherClass *myObject;
public MyClass()
{
//The object is created when the class is constructed
myObject = (SomeOtherClass*)malloc(sizeof(myObject));
}
public ~MyClass()
{
//The class is destructed
//If you don't free the object here, you leak memory
free(myObject);
}
public void SomeMemberFunction()
{
//Some use of the object
myObject->SomeOperation();
}
};
В этом примере я использую объект типа SomeOtherClass во время жизни MyClass. Объект SomeOtherClass используется в нескольких функциях, поэтому я динамически распределяю память: объект SomeOtherClass создается при создании MyClass, используется несколько раз в течение срока службы объекта и затем освобождается после освобождения MyClass.
Очевидно, что если бы это был реальный код, не было бы никакой причины (кроме, возможно, использования стека памяти) для создания myObject таким способом, но этот тип создания / уничтожения объектов становится полезным, когда у вас много объектов и вы хотите для точного контроля, когда они создаются и уничтожаются (например, чтобы ваше приложение не высасывало 1 ГБ ОЗУ в течение всего срока его службы), а в оконной среде это в значительной степени является обязательным, поскольку объекты, которые вы создаете (кнопки скажем,) должны существовать далеко за пределами какой-либо конкретной функции (или даже класса).