Можно ли в конструкторе класса проверить некое условие и сразу запустить деструктор, если условие не удовлетворяется?
Или же придется бросать исключение?
И что вы хотите получить? Отсутствие объекта? Но если объект начал создаваться - то на выходе должен либо быть корректный объект, либо исключение.
Вы можете, скажем, освободить память - выполняя действия деструктора, но все равно если нет исключения - в результате должен быть создан валидный объект...
Вы в принципе можете вызвать деструктор
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
, вы уже выделяете память. Если конструктор не сгенерирует исключение - что окажется в этой памяти?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно разделить очередь на две, в одну значения большие или равные среднему,во вторую меньшие,при этом не создавая новую(задание такое)Как...
Подскажите какие должны быть настройки у image-min и его плагинов через Gulp, чтобы уровень сжатия картинок (png, jpg) был приближен к сжатию в Tinypng ?