[openrtm-users 00800] RefCount

4 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 2日 2時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00800] RefCount

OpenRTM-aist開発者の皆様

Configuration_impl::getObjRef();
で、RefCountをインクリメントしていないのですが、
これは意図したものでしょうか。
(var型のreturnはptr型をそのまま返すだけ
のようです。omniORB4/templatedecls.h参照。)

基本ルールからすると、duplicateしたほうが安全では、
と考えます。

静岡大 清水

未定義
root
オフライン
Last seen: 2日 2時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00802] RefCount

清水様

安藤です

ご指摘の通りです。
CORBAの通常のルールでは、オブジェクトリファレンスを
return時には内部でリファレンスの所有権を放棄(例えばduplicate()し)、
外でreleaseするのが正しいです。

> OpenRTM-aist開発者の皆様
>
> Configuration_impl::getObjRef();
> で、RefCountをインクリメントしていないのですが、
> これは意図したものでしょうか。
> (var型のreturnはptr型をそのまま返すだけ
> のようです。omniORB4/templatedecls.h参照。)
>
> 基本ルールからすると、duplicateしたほうが安全では、
> と考えます。

この辺は、CORBAインターフェースとそうでないインターフェースの
オブジェクトリファレンスの扱いをそれぞれどう扱うかの問題で、
CORBAインターフェースの方は選択の余地はありませんが、
それ以外のインターフェースでは、以前は結構適当に扱ってました
ので、現在それらを直す作業を行っています。

ちなみに、getObjRef()が参照をduplicateしないのは、
rtobj.getObjRef()->get_component_profile() のように ->演算子を
ダイレクトに使えたり便利なのでこのようにしてました。

root
オフライン
Last seen: 2日 2時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00806] RefCount

安藤様

> この辺は、CORBAインターフェースとそうでないインターフ
ェースの
> オブジェクトリファレンスの扱いをそれぞれどう扱うかの問
題で、
> CORBAインターフェースの方は選択の余地はありませんが、
> それ以外のインターフェースでは、以前は結構適当に扱って
ました
> ので、現在それらを直す作業を行っています。
>
> ちなみに、getObjRef()が参照をduplicateしないのは、
> rtobj.getObjRef()->get_component_profile() のように
> ->演算子を
> ダイレクトに使えたり便利なのでこのようにしてました。

なるほど。これはC++だけのメソッドなので、
ユーザが適正に使うというように決めておけば
よさそうですね。
ただ、取得したrefをvar型に入れたい人もいると
思うので、
getObjVar();
または、
getObjRef(bool use_var_type = false);
のようなインタフェースがあると
よいかもしれません。
要は、var格納用とptr直接呼び出し用
があると使う側はわかりやすいし便利かな、
と感じます。どうでしょうか。

清水

root
オフライン
Last seen: 2日 2時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00817] RefCount

清水様

安藤です

>> ちなみに、getObjRef()が参照をduplicateしないのは、
>> rtobj.getObjRef()->get_component_profile() のように
>> ->演算子を
>> ダイレクトに使えたり便利なのでこのようにしてました。
>
> なるほど。これはC++だけのメソッドなので、
> ユーザが適正に使うというように決めておけば
> よさそうですね。
> ただ、取得したrefをvar型に入れたい人もいると
> 思うので、
> getObjVar();
> または、
> getObjRef(bool use_var_type = false);
> のようなインタフェースがあると
> よいかもしれません。
> 要は、var格納用とptr直接呼び出し用
> があると使う側はわかりやすいし便利かな、
> と感じます。どうでしょうか。

すみません。勘違いしてました。
rtobj.getObjeRef()->get_component_profile()

rtobj.get_component_profile()
で呼べますね。
あまり必要なかったかもしれません。

ただ、Manager::getORB()やgetPOA()では、var格納用とptr直接呼び出し用
の2種類があると便利ですね。そっちと勘違いしておりました。

でも、Servantのactivateやdeactivateを自動でやってくれる
便利ServantBaseを実装するのは役に立ちそうです。
考えてみます。

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2209
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク