Мне нужно создать набор классов C++
для существующей библиотеки C
.
Для многих объектов библиотеки C
построение выполняется путем вызова чего-то вроде britney_spears* create_britney_spears()
и противоположной функции void free_britney_spears(britney_spears* brit)
.
Если присвоение britney_spears
не удается, create_britney_spears()
возвращает NULL
.
Насколько я знаю, это очень распространенная модель.
Теперь я хочу обернуть это в C++
класс.
//britney_spears.hpp
class BritneySpears
{
public:
BritneySpears();
private:
boost::shared_ptr<britney_spears> m_britney_spears;
};
А вот и реализация:
// britney_spears.cpp
BritneySpears::BritneySpears() :
m_britney_spears(create_britney_spears(), free_britney_spears)
{
if (!m_britney_spears)
{
// Here I should throw something to abort the construction, but what ??!
}
}
Итак, вопрос в примере кода: Что я должен бросить, чтобы прервать конструктор?
Я знаю, что могу бросить почти все, но я хочу знать, что обычно делается. У меня нет другой информации о том, почему распределение не удалось. Должен ли я создать свой собственный класс исключений? Есть ли std
исключение для таких случаев?
Большое спасибо.