Здравствуйте, Aera, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>Произошел сбой. Забросили исключение. Перехватили его. И тут вопрос, нужно ли этот непроинициализировавшийся объект удалять: delete something; ?
A>Если брошено исключение, то для всех переменных которые уже были сконструированы будут вызваны деструкторы
A>
A>class A
A>{
A> std::string a;
A> std::auto_ptr<int> b;
A>public:
A> A()
A> : a("")
A> , b(new int)
A> {
A> throw std::exception();
A> // будут вызваны деструкторы для a и для b
A> }
A> ~A()
A> {
A> // деструктор никогда не будет вызыван, поскольку конструктор никогда не завершит работу
A> }
A>};
A>int main()
A>{
A> try
A> {
A> std::string bb;
A> A a;
A> }
A> catch(std::exception&)
A> {
A> // будет вызыван деструктор для bb
A> }
A>}
A>
Aera, а если объект создавался динамически?
class A
{
std::string a;
std::auto_ptr<int> b;
public:
A()
: a("")
, b(new int)
{
throw std::exception();
// будут вызваны деструкторы для a и для b
}
~A()
{
// деструктор никогда не будет вызыван, поскольку конструктор никогда не завершит работу
}
};
int main()
{
A * a;
try
{
std::string bb;
a = new A;
}
catch(std::exception&)
{
// будет вызыван деструктор для bb
//нужен ли здесь delete a; ?
}
}