Re[3]: как остановить создание класса
От: Aera Беларусь  
Дата: 08.09.06 08:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Произошел сбой. Забросили исключение. Перехватили его. И тут вопрос, нужно ли этот непроинициализировавшийся объект удалять: delete something; ?


Если брошено исключение, то для всех переменных которые уже были сконструированы будут вызваны деструкторы


class A
{
  std::string a;
  std::auto_ptr<int> b;
public:
  A()
  : a("")
  , b(new int)  
  {
    throw std::exception();
    // будут вызваны деструкторы для a и для b
  }

  ~A()
  {
    // деструктор никогда не будет вызыван, поскольку конструктор никогда не завершит работу
  }
};

int main()
{
  try 
  {
    std::string bb;
    A a;
  }
  catch(std::exception&)
  {
    // будет вызыван деструктор для bb
  }
}
--
RedApe
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.