2

私は基本的なSQLiteラッパーを書いています。これを行っている間、SQLiteデータベースを手動で開いたり閉じたり、SQLiteのAPIを使用してSQLiteコンパイル済みステートメント構造体を作成および破棄していることに気付きました。これらのリソースを手動で作成/破棄します。私が学んでいることは、エラーが発生したときに関数が時期尚早に戻らなければならないときに、ちょっと厄介になります。

これを処理するより多くのC++の方法は、スタック上のオブジェクトの存続期間にこれらのものをRAIIスタイルで管理させることであると私は思いました。そうすれば、関数から戻るときはいつでも(早期にエラーが発生したかどうかにかかわらず)、これらのクリーンアップタスクは、スタックがほどけるときにデストラクタによって処理されます。

私の質問は、これらのヘルパーRAIIクラス(SQLiteDBHandle、SQLiteStatementHandleなど)の使用がより大きなSQLiteラッパークラスに関連付けられている場合、SQLiteラッパー内でプライベートネストクラスとして宣言するか、単に宣言して定義する方がよいでしょう。独自のヘッダーと実装ファイルのないSQLiteラッパーの実装ファイル?

.cppファイルにスタンドアロンクラスとして配置する傾向があります。

私が見逃している大きなラッパーの.cppファイルに隠されているものを宣言して定義するだけの欠点はありますか?

4

1 に答える 1

1

いいえ、それはまったく問題ありません。

一部のクラスまたは関数が1つの.cppファイルでのみ使用される場合は、それらをそのファイルで定義するのが理にかなっています。

一方、それらがかなりのサイズ(それが意味するものは何でも)である場合、または他の場所で使用できる場合は、それらを別のソースファイルに入れる方がよいでしょう。ただし、要件が変更された場合は、後で修正することもできます。

于 2011-04-16T10:59:07.283 に答える