1

弊社ではC++のコアクラスの一つ(データベース接続ポインタ)を参照カウントポインタとして実装しています。明確にするために、オブジェクトは DB 接続自体ではなく、DB 接続オブジェクトへのポインターです。

ライブラリは非常に古く、設計者はもう誰もいません。

これまでのところ、私も、私が尋ねた会社の C++ 専門家も、この特定の設計が選択された理由について十分な理由を見つけていません。何か案は?

いくつかの問題が発生しています (部分的には、使用されているひどい参照ポインターの実装が原因です)。この設計に実際に深い根本的な理由があるかどうかを理解しようとしていますか?

最近の使用パターンは、DB 接続マネージャー クラスによって DB 接続ポインター オブジェクトが返されるようで、DB 接続ポインターが DB 接続マネージャーとは独立して使用できるように設計されているかどうかは不明です。

4

1 に答える 1

2

おそらくそれは間違いです。コードを見ないと確実に知ることはできませんが、参照カウント ポインターの実装の品質は示唆に富むものです。特にリソース管理に関する貧弱な設計は、C++ コミュニティでは前代未聞ではありません</bitter sarcasm>

そうは言っても、作成するのに非常にコストがかかる、または複数のユーザー間で状態を共有する必要がある不確定な寿命のオブジェクトがある場合、参照カウントポインターは役立ちます。基盤となるアーキテクチャによっては、データベース接続がこの定義に適合する可能性があります。たとえば、各データベース接続がグローバル インターネット経由で認証する必要がある場合、新しい接続を作成して破棄するよりも、単一の接続を保存して再利用する方が簡単に価値がある場合があります。あなたが行くようにそれらの。

しかし、私があなたを正しく理解していれば、参照カウントされたポインターのコレクションを指す単一のデータベース接続オブジェクトはありません。むしろ、データベース接続オブジェクト、それへの通常のポインターのコレクション、およびそれらのポインターへの参照カウントされたポインターのコレクションがあります。これは正気ではなく、元の開発者の混乱した考えの結果であることはほぼ間違いありません。別の言い方をすれば、それが意図的な悪の行為であったということです。たとえば、仕事の安全を確保するためです。もしそうなら、加害者はまだあなたの会社で働いていないので、彼らは失敗したに違いありません.

于 2010-03-24T14:16:18.360 に答える