Вспомогательные классы - закрытый вложенный класс против класса, объявленного и определенного только в файле реализации - PullRequest
2 голосов
/ 16 апреля 2011

Я пишу простую оболочку SQLite.При этом я заметил, что часто открываю и закрываю базы данных SQLite вручную, создавая и уничтожая скомпилированные структуры операторов SQLite с использованием API SQLite.Создание / уничтожение этих ресурсов вручную.То, что я изучаю, становится немного запутанным, когда функция должна преждевременно возвращаться при возникновении ошибки.

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

У меня вопрос к этим вспомогательным классам RAII (SQLiteDBHandle, SQLiteStatementHandle)например) использование которых связано с более крупным классом оболочки SQLite, было бы лучше объявить их как частные вложенные классы в оболочке SQLite или просто объявить и определить их в файле реализации оболочки SQLite без заголовка и файлов реализациисвоих собственных?

Я склонен просто помещать их как отдельные классы в файл .cpp.

Есть ли недостаток в том, чтобы просто объявлять и определять их, скрытые в большей оберткеФайл .cpp, который мне не хватает?

1 Ответ

2 голосов
/ 16 апреля 2011

Нет, это прекрасно.

Если некоторые классы или функции используются только в одном файле .cpp, имеет смысл определить их в этом файле.

С другой стороны, если они имеют значительный размер (что бы это ни значило) или могли использоваться в другом месте, вам лучше было бы поместить их в отдельный исходный файл. Но это также можно исправить позже, если требования изменятся.

...