Re[10]: Похоже, починил.
От: rg45 СССР  
Дата: 21.12.18 08:44
Оценка:
Здравствуйте, Sheridan, Вы писали:


class cobject
{
public:

  cobject()
  : p1(new vertexbuf())
  , p2(new vertexbuf()) // <--- Вот здесь летит исключение, объект p1 подвис навеки.
  {
  }

  virtual ~cobject()
  {
    delete p1;
    delete p2;
  }

private:
  vertexbuf* p1;
  vertexbuf* p2;
};


S>Почему исключение нельзя перехватить в конструкторе? Почему ты придумываешь мне редкие аварии?


Можно. Но!

1. Что ты будешь с этим исключением делать? Как ты определишь, какой из объектов кинул исключение? Они ведь неразличимы. Или ты будешь инициализацию каждого мембера в отдельности обраблять в try- catch?

2. Эту проблему нужно будет решать в КАЖДОМ классе, содережащем более одного указателя. Представь, во что превратится твой код и какое количество ошибок будет плодиться в этом аду.

3. Откуда у тебя уверенность, что эта ситуация редкая? А даже если и редкая, то что — можно игнорировать что ли?

И главное: зачем создавать сложности, когда все эти "но" разрешаются предельно просто:

class cobject
{
public:

  cobject()
  : p1(new vertexbuf())
  , p2(new vertexbuf()) // <--- Вот здесь летит исключение - а нам насрать!
  {
  }
  virtual ~cobject(){}

private:
  shared_ptr<vertexbuf> p1;
  shared_ptr<vertexbuf> p2;
};
--
Отредактировано 21.12.2018 9:00 rg45 . Предыдущая версия . Еще …
Отредактировано 21.12.2018 8:46 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.