Ostrzeżenie kompilatora (poziom 1) C4722
"function" : destruktor nigdy nie zwraca, potencjalny wyciek pamięci
Przepływ sterowania kończy się w destruktorze. Wątek lub cały program zakończy działanie i przydzielone zasoby nie zostaną zwolnione. Ponadto jeśli destruktor zostanie wywołany do odwijania stosu podczas przetwarzania wyjątków, zachowanie pliku wykonywalnego jest niezdefiniowane.
Aby rozwiązać ten problem, usuń wywołanie funkcji, które powoduje, że destruktor nie zwraca.
Przykład
Poniższy przykład generuje C4722:
// C4722.cpp
// compile with: /O1 /W1 /c
#include <stdlib.h>
class C {
public:
C();
~C() { exit(1); }; // C4722
};
extern void func (C*);
void Test(){
C x;
func(&x);
// control will not leave Test because destructor will exit
}