- ベストアンサー
C++で参照カウンタを実装したいのですが
こんにちは。 C++でクラスに参照カウンタを実装したいのですが、もしも実装する場合、 class CRefCounter { 参照カウンタとAddRef、Releaseメソッドを仮想メソッドとして実装 }; このクラスを継承して直接使う方法と、 class IRefCounter { 参照カウンタとAddRef、Releaseメソッドを純粋仮想メソッドとして宣言 } このクラスを継承して継承側で実装する方法とがあると思うのですが普通はどちらを使うものでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
IRefCounterを基底クラスに CRefCounterを作成して、CRefCounterのAddRef/Releaseを実装する。 そして、CRefCounterを継承して参照カウンターを利用するクラスを実装する、というのはどうでしょうか? 参照カウンターを利用する場合はIRefCounterを経由して操作するようにすれば、複数の実装を共存することも可能になります。
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
割付け記憶域期間以外を持つオブジェクトや配列の場合はどう扱い予定なのでしょうか?
お礼
>>割付記憶期間以外を持つオブジェクト というのはnewで確保したオブジェクト以外という意味でしょうか? それはコンストラクタをprivateにすることでCreate系のメソッドを経由させようとしていました。 配列のほうは完全に見落としていました。 自分の実装方法だといろいろ問題があるようですので、また少し考えさせていただきたいと思います。 ありがとうございました。
- gentoo314
- ベストアンサー率41% (15/36)
COM の IUnknown インターフェースや、その実装クラスを参考にされてはどうでしょうか。
お礼
回答ありがとうございます。 IUnknownインターフェースは一度見たのですがいまいちよくわからなくて質問させていただいた次第でございます。 勉強不足ですみません。
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 う~ん。 上でも問題無いとは思いますが・・・、私が所有しているCOMの書籍では、下でした。
- splwtr
- ベストアンサー率16% (75/461)
参照カウンターは、どの時点で、参照(インクリメント、デクリメント) されるのですか?
補足
回答ありがとうございます。 参照カウンタは自分でAddRefなどを呼び出す予定です。
お礼
参考にさせていただきます。ありがとうございました。