История изменений
Исправление X512, (текущая версия) :
проблема возникает, когда объект непростой, логика его создания непростая.
Пример на C++:
#include <stdio.h>
#include <memory>
class Object
{
public:
int fId;
Object(int id): fId(id) {printf("+Object(%d)\n", fId); if (fId == 2) throw this;}
~Object() {printf("-Object(%d)\n", fId);}
};
class CompObject
{
public:
std::unique_ptr<Object> fObj1, fObj2, fObj3;
CompObject()
{
printf("+CompObject\n");
fObj1.reset(new Object(1));
fObj2.reset(new Object(2));
fObj3.reset(new Object(3));
}
~CompObject()
{
printf("-CompObject\n");
}
};
int main()
{
try {
CompObject co;
} catch(...) {
printf("catch\n");
}
return 0;
}
Результат:
+CompObject
+Object(1)
+Object(2)
-Object(1)
catch
Исходная версия X512, :
проблема возникает, когда объект непростой, логика его создания непростая.
Пример на C++:
#include <stdio.h>
#include <memory>
class Object
{
public:
int fId;
Object(int id): fId(id) {printf("+Object(%d)\n", fId); if (fId == 2) throw this;}
~Object() {printf("-Object(%d)\n", fId);}
};
class CompObject
{
public:
std::unique_ptr<Object> fObj1, fObj2, fObj3;
CompObject()
{
printf("+CompObject\n");
fObj1.reset(new Object(1));
fObj2.reset(new Object(2));
fObj3.reset(new Object(3));
}
~CompObject()
{
printf("-CompObject\n");
}
};
int main()
{
try {
CompObject co;
} catch(...) {
printf("catch\n");
}
return 0;
}
Результат:
+CompObject
+Object(1)
+Object(2)
-Object(1)
catch