2

我正在编写一个基本的 SQLite 包装器。在执行此操作时,我注意到我经常手动打开和关闭 SQLite 数据库,使用 SQLite 的 API 创建和销毁 SQLite 编译语句结构。手动创建/销毁这些资源。当发生错误时函数必须过早返回时,我正在学习的内容会变得有点混乱。

我突然想到,处理这个问题的更多 C++ 方法是让堆栈上的对象的生命周期管理这些东西 RAII 风格。这样,每当我从函数返回时(早期是否由于错误),这些清理任务将在堆栈展开时由析构函数处理。

我的问题是,对于这些辅助 RAII 类(例如 SQLiteDBHandle、SQLiteStatementHandle),它们的使用与较大的 SQLite 包装器类相关联,最好将它们声明为 SQLite 包装器中的私有嵌套类,或者简单地声明和定义它们SQLite 包装器的实现文件,没有自己的头文件和实现文件?

我倾向于将它们作为独立的类放在 .cpp 文件中。

仅在我丢失的较大包装器的 .cpp 文件中声明和定义它们是否有缺点?

4

1 回答 1

1

不,那完全没问题。

如果某些类或函数仅在一个 .cpp 文件中使用,则在该文件中定义它们是有意义的。

另一方面,如果它们很大(无论这意味着什么),或者可以在其他地方使用,那么最好将它们放在单独的源文件中。但是,如果需求发生变化,这也可以在以后修复。

于 2011-04-16T10:59:07.283 回答