Si la libération de la mémoire prend beaucoup de temps, ne le faites pas. Cela peut être un gros problème et prendre beaucoup de temps, surtout si la libération de la mémoire mène à de nombreux échecs de cache. OS fera le travail (bien sûr, si vous travaillez sur les systèmes qui le font). Toutefois, si votre destructeur finalise certaines ressources (par exemple, déverrouiller un fichier ou un composant matériel) et que vous utilisez l'initialisation de l'acquisition de ressources, vous devez vous assurer que les destructeurs appropriés sont appelés (par exemple: http://www.microsoft.com/downloads/docs/docs/docs/display.aspx?hl=fr , ceux des objets statiques sont appelés après vos retours de fonction main()
). Ceci est vrai si certains des objets alloués à l'intérieur de votre singleton verrouillent aussi les ressources!
Dans la plupart des cas, donc, il vaut mieux en fait écrire un destructor pour un tel objet et de le rendre libérer de la mémoire en option .
SSS, qui a posé la question, a décidé de ne pas écrire destructor du tout. Cependant, je voudrais dire un peu plus que ce n'est pas la meilleure solution. Le fait de ne pas libérer de mémoire pour un objet statique (appelons-le "statique") est une optimisation très subtile qui contredit le bon sens et la façon dont les gens écrivent habituellement des programmes. Votre code, l'allocation de la mémoire et simplement n'ayant pas de destructeur, regarde bizarre. Les pairs penseront que la classe est mal écrite, aura tendance à regarder les bugs dedans (alors qu'ils sont dans l'autre classe).Au lieu de cela, vous devez vous conformer aux normes de codage courantes qui exigent que la gestion de la mémoire en C++ soit correcte. Ecrivez un destructeur et, seulement après qu'il montre qu'il a une amélioration significative pour ne pas le libérer, enveloppez le code pour qu'il ne soit pas appelé.
L'intention de ne pas libérer la mémoire doit être explicite.
MySingleton::~MySingleton()
{
#ifndef RELEASE
// The memory will be released by OS when program terminates!
delete ptr1;
delete ptr2;
#endif
}
ou même
MySingleton::~MySingleton()
{
// We don't do anything here.
// The memory will be released by OS when program terminates!
}
mais destructor est préférable de persister.
Quel est « rapide » dans «la réponse devrait être rapide? –
@dribeas: Peut-être, réponse rapide de l'appel 'wait()' dans la communication inter-processus? –