Udostępnij za pośrednictwem


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
}