Если освобождение памяти занимает много времени, то не делайте этого. Это может быть большой и трудоемкой проблемой, особенно если освобождение памяти приводит к многочисленным промахам кеша. ОС выполнит эту работу (конечно, если вы работаете в системах, которые действительно это делают).
Однако, если ваш деструктор выполняет финализацию некоторых ресурсов (например, разблокировку файла или части оборудования), а вы используете «получение ресурсов — это инициализация», вы должны убедиться, что вызываются правильные деструкторы (например, деструкторы статического объекты вызываются после возврата вашей функции main()). Это справедливо, если некоторые из объектов, выделенных внутри вашего синглтона, также блокируют ресурсы!
Поэтому в большинстве случаев лучше на самом деле написать деструктор для такого объекта и заставить его освобождать память необязательно.
SSS, задавший вопрос, решил вообще не писать деструктор. Однако я хотел бы еще немного поспорить, что это не лучшее решение.
Не освобождать память для статического объекта (назовем его «статическим») — очень тонкая оптимизация, которая противоречит здравому смыслу и тому, как люди обычно пишут программы. Ваш код, выделяющий память и просто не имеющий деструктора, выглядит странно. Сверстники будут думать, что класс написан плохо, будут искать в нем ошибки (пока они в другом классе).
Вместо этого вы должны соответствовать общим стандартам кодирования, которые диктуют, что управление памятью в C++ должно быть правильным. Напишите деструктор и только после того, как он покажет, что у него есть значительное преимущество, чтобы не освобождать его, оберните код, чтобы он не вызывался.
Намерение не освобождать память должно быть явным.
MySingleton::~MySingleton()
{
#ifndef RELEASE
// The memory will be released by OS when program terminates!
delete ptr1;
delete ptr2;
#endif
}
или даже
MySingleton::~MySingleton()
{
// We don't do anything here.
// The memory will be released by OS when program terminates!
}
но деструктор лучше сохранить.
person
P Shved
schedule
26.09.2009
wait()в межпроцессном взаимодействии? - person P Shved   schedule 26.09.2009