Можно ли в конструкторе класса проверить некое условие и сразу запустить деструктор, если условие не удовлетворяется? Или же придется бросать исключение?
Ответ
И что вы хотите получить? Отсутствие объекта? Но если объект начал создаваться - то на выходе должен либо быть корректный объект, либо исключение.
Вы можете, скажем, освободить память - выполняя действия деструктора, но все равно если нет исключения - в результате должен быть создан валидный объект...
Вы в принципе можете вызвать деструктор
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, вы уже выделяете память. Если конструктор не сгенерирует исключение - что окажется в этой памяти?
Комментариев нет:
Отправить комментарий