У меня есть класс одноплодного следующим образом:Статическая распределяемая память релиз
class myClass
{
public:
static myClass* getInstance();
~myClass();
private:
static myClass* m_instance;
protected:
myClass();
};
и выше определение класса:
myClass* myClass::m_instance = 0;
myClass::myClass()
{
}
myClass::~myClass()
{
}
myClass* myClass::getInstance()
{
if(m_instance == 0)
m_instance = new myClass;
return m_instance;
}
Как известно, когда память выделяется new
, она должна чтобы быть выпущенным в кучу, чтобы предотвратить утечку памяти. В моем случае я выделил память, которая не связана с деструктором из-за того, что она статична. Итак, как я могу выделить выделенную память? Я должен вообще освободить его? Не приведет ли это к утечке памяти, поскольку у меня есть объекты других классов, которые также функционируют в main()
?
PS: объект, возвращаемый getInstance()
, существует в main()
до завершения работы приложения.
Или вы можете зарегистрировать функцию функции 'atexit()'. –
Предполагая, что вы работаете на ОС, которая предоставляет отдельное пространство памяти для каждого процесса (то есть практически любой современной ОС в наши дни), «утечка памяти» в этом сценарии несущественна, потому что сразу после возврата main() вся память, был выделен процессом, который в любом случае восстанавливается ОС. Единственный раз, когда это может иметь значение, - если ~ myClass() необходимо выполнить некоторую работу по очистке вне пространства процесса (например, удалить файл из/tmp или что-то еще). Предполагая, что это не так, самым простым решением является просто игнорировать проблему, так как это не вызовет у вас никаких проблем. –