Pour répondre à ma question, j'ai effectué quelques tests:Est-ce que std :: quitte la mémoire de fuite?
(pour reproduire ci-dessous comprend sont nécessaires)
#include <cstdlib>
#include <memory>
J'ai fait une fonction qui a appelé std::exit
, avec un std::unique_ptr
dans la fonction main
.
void some_function()
{
std::exit(EXIT_SUCCESS);
}
int main()
{
std::unique_ptr<int> relying_on_raii{new int{5}};
}
Si j'ai appelé some_function
après la déclaration unique_ptr
, la mémoire pourrait fuir.
Les deux journaux je suis arrivé de Dr. Memory différé dans la ligne suivante:
1 potential leak(s) (suspected false positives)
[…]
6 unique, 6 total, 797 byte(s) of still-reachable allocation(s)
contre
1 potential leak(s) (suspected false positives)
[…]
7 unique, 7 total, 801 byte(s) of still-reachable allocation(s)
Comme on le voit, dans le second exemple une fuite potentielle 7 est survenue, qui a été 4 octets en taille, qui est exactement la taille d'un int
. Quand j'ai répété ce test avec double, il s'est avéré être 805 byte(s)
dans le test avec std::exit
.
Est-ce que std::exit
est une fonction sûre à utiliser, ou devriez-vous toujours revenir de l'alimentation principale pour éviter les fuites de mémoire?
Si vous appelez 'sortie', une fuite est-elle toujours une préoccupation majeure? Si vous voulez que la pile soit déroulée. Jetez une exception que seul 'main' peut attraper. – StoryTeller
@StoryTeller Je veux utiliser std :: exit comme la manière habituelle de quitter mon programme, puisque je devrais appeler return 3 fois, avec une vérification de la valeur de bool, si on doit rétrograder et cela semble plus facile à faire avec 'std: : sortie'. 'throw' est une idée intéressante, mais il semble que ce soit un hack pour lancer une sortie réussie – kim366
Si le programme est quitté, qu'est-ce qu'il y a de fuite? L'OS nettoiera le processus. – NathanOliver