...//реализацияMyClass::MyClass(){ if (не выполняется какое-то условие) { тут прервать конструирование и вернуть НУЛЬ! }}...//где-то в программе MyClass *c = new MyClass(); //тут проверяем, создался ли объект или нет if (!c) { //тут завершаем программу }
MyClass::MyClass(){ .... if (не выполняется какое-то условие) { m_valid = false; return; } ....}bool MyClass::isValid() const{ return m_valid;}//где-то в программе MyClass *c = new MyClass(); //тут проверяем, создался ли объект или нет if (!c->isValid()) { //тут завершаем программу }...
QSocketNotifier *notifier = new QSocketNotifier (this);
QSocketNotifier::QSocketNotifier( ..){ ... if (somethingWrong) throw MyException(); ...}// вызывающийtry { QSocketNotifier *notifier = new QSocketNotifier (this);}catch (MyException &) { notifier = 0;}catch (...) { ...}
MyClass * m = MyClass();bool b = m->init();if (!b){ /// Все плохо}...MyClass::MyClass() {}bool MyClass::init{ timer = new QTimer(this); //и вот тут нужно проверить, а валиден ли таймер? //ведь у класса QTimer нет методов для проверки его валидности! // т.е. объект timer то создастся, но как проверить "чисто гипотетически" будет ли он работать корректно? // вдруг в конструкторе таймера пошло что-то не так?? if (все плохо) rerurn false;}
C++ (Qt)Myslass::Myslass(QObject *parent) : QObject(parent), timer(0), notifier(0){ //Здесь могут происходить обломы std::auto_ptr<QTimer> timer = new QTimer(this); if (otherSomethingWrong) throw MyException(); std::auto_ptr<QSocketNotifier> notifier = new QSocketNotifier (this); .... //Здесь обломов уже быть не может this->timer = timer.release(); this->notifier = notifier.release();}