Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Можно ли в кострукторе класса проверить некое условие и сразу запустить деструктор, если условие не удовлетворяет?

Можно ли в конструкторе класса проверить некое условие и сразу запустить деструктор, если условие не удовлетворяется? Или же придется бросать исключение?


Ответ

И что вы хотите получить? Отсутствие объекта? Но если объект начал создаваться - то на выходе должен либо быть корректный объект, либо исключение.
Вы можете, скажем, освободить память - выполняя действия деструктора, но все равно если нет исключения - в результате должен быть создан валидный объект...
Вы в принципе можете вызвать деструктор
class String { public: String(const char * s); ~String(); private: char * s; };
String::String(const char * x) { s = new char[strlen(x)+1]; strcpy(s,x); if (1 /*в строке - маты :)*/) { this->~String(); s = nullptr; } }
String::~String() { delete[] s; }
int main(int argc, const char * argv[]) { String s("hello"); }
Только объект-то все равно будет создан. Как и при динамическом создании - вызвав new, вы уже выделяете память. Если конструктор не сгенерирует исключение - что окажется в этой памяти?

Комментариев нет:

Отправить комментарий