3

私はクラスを持っています:

class Impl1 : public POA_I1
{
   private :
          Impl2_var ob;
   public :
          Impl2_ptr get();
          {
             return ob;
          }

          void set(::Impl2_ptr ob)
          {
             this->ob = ob;
          }
};

私は少し混乱しています_ptr_var。私はそれを読んだ

MyObject_varオブジェクト参照型の_varバージョンは、_ptr参照とほぼ同じようにプロキシへのハンドルとして機能しますが、メモリ管理も追加します。すべての_varタイプと同様に、_var参照は、参照がスコープ外になると、基になるインスタンス(この場合はプロキシインスタンス)の割り当てを解除します。_ptr参照と_var参照の両方により、クライアントはプロキシインスタンスの操作にアクセスできます

しかし、私はそれぞれをいつ使用するのか、そしてその理由を理解していません。つまり、私の実装では=どちらを使用する必要がありますか、_varまたは_ptrその理由は何ですか?_varそして、クラスに型のフィールドを持ち、_ptrセッターに戻ることは合法ですか?まったくわからない。

4

2 に答える 2

3

ジョニーが指摘したように、それはすべてメモリの所有権に関するものです。_ptr変数を_var変数に割り当てる場合、_var変数がスコープ外になると、メモリが削除されるため、その_ptr変数は使用しない方がよいでしょう。

あなたが提供した場合、あなたが呼び出すとき、あなたはポインタの所有権set型のオブジェクトを与えています。Impl1あなたはまだあなたが持っているものを使うことができます、あなたは呼び出すことができます、しかしあなたが呼び出すImpl1::getことによってその_ptrのオブジェクト所有権を与えたsetので、オブジェクトが削除されるとそのポインタによって参照されるメモリも削除されます。

于 2012-08-13T20:54:15.630 に答える
1

現在のIDLからC++へのマッピングは非常に難しく、混乱を招きます。いつものように、Henning&Vinowskiの本を参照してください。

一般に、オブジェクト参照に対してこれを行います。

  1. 常にオブジェクト参照を_ptr関数の引数の型として渡します。
  2. ただし、常にそれら(メンバー変数、ローカル変数など)を_var型に格納してください。
于 2012-08-14T23:41:10.057 に答える