Стоп C ++ Класс Инстанциация - PullRequest
       17

Стоп C ++ Класс Инстанциация

3 голосов
/ 18 декабря 2010

Есть ли способ остановить класс C ++, если при создании экземпляра произошла ошибка? Мол, вернуть NULL может быть? По сути, у меня есть класс-оболочка для MySQL, и конструктор выполняет соединение, но если соединение не удается, я хочу, чтобы объект был бесполезным?

PDB::PDB(string _DB_IP, string _DB_USER, string _DB_PASS, string _DB_DB)
  : _DB_IP( _DB_IP ), _DB_USER( _DB_USER ), _DB_PASS( _DB_PASS ), _DB_DB( _DB_DB )
{
  mysql_init(&this->mysql);

  this->connection = mysql_real_connect(&this->mysql, this->_DB_IP.c_str(), this->_DB_USER.c_str(), this->_DB_PASS.c_str(), this->_DB_DB.c_str(), 0, 0, 0);

  if( this->connection == NULL ) // WHAT SHOULD I DO HERE, OTHER THAN THROW AN ERROR?
    {
      cout << mysql_error(&this->mysql) << endl;
    }

  this->result = NULL;
}

Что мне делать в тесте NULL, чтобы остановить создание и т. Д.?

Ответы [ 2 ]

10 голосов
/ 18 декабря 2010

Бросок исключения - единственный способ указать на ошибку во время построения.

5 голосов
/ 18 декабря 2010

Если соединение обычно не удается, установите флаг в объекте и предоставьте функцию-член is_connected () для класса и используйте ее в своем коде приложения.Если это обычно не может потерпеть неудачу, бросьте исключение.Первый - это шаблон, который стандартная библиотека C ++ использует для открытия потоков файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...