Re[4]: как остановить создание класса
От: Аноним  
Дата: 08.09.06 08:57
Оценка:
Здравствуйте, 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; ?
  }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.