Poniższy przykład powoduje, że możliwy jest wyciek pamięci, ponieważ destruktor nie działa dla obiektu, na którym jest obsługiwany wyjątek podczas uruchamiania jego konstruktora. gdzie poradzę sobie z tym wyciekiem pamięci?Wyłapywanie wyjątków w konstruktorze
#include <exception>
class MyClass {
public:
MyClass()
{
c = new char[5];
throw std::runtime_error("test");
}
~MyClass()
{
delete[] c;
}
private:
char *c;
};
int main()
{
try
{
MyClass Obj;
}
catch (std::runtime_error)
{
}
}
Co wzywa do tego przegłosowania? RAII to najlepszy sposób, aby to osiągnąć, a jeśli ktoś mówi inaczej, to jest niepoprawny. Jeśli czujesz się odpowiedzialny za Downvote, poczuj się na tyle odpowiedzialny, aby wyjaśnić nam, dlaczego? A jeśli nie możesz i po prostu * czujesz * to jest złe, to nie jesteś wystarczająco wykwalifikowany, aby zrobić sobie krzywdę, niech ktoś inny to zrobi. –
jest to rozwiązanie oparte na materiałach związanych z C++ 11? – user103214
Nie, to jest C++ 03. –