_ptr或_var - 哪一个用作类字段?为什么?

时间:2012-08-13 16:04:55

标签: c++ corba idl omniorb

我有一个班级:

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版本充当a   处理toproxy的方式与_ptr引用的处理方式大致相同,但也增加了   内存管理。像所有_var类型一样,_var引用会处理   解除分配其底层实例(在本例中为代理   instance)当引用超出范围时。两个_ptr引用   和_var引用允许客户端访问onproxy操作   实例

但我不明白何时使用每一个以及为什么。我的意思是,在我的实现中,我应该使用哪一个,_var_ptr以及为什么?在类中使用_var类型的字段并在setter中返回_ptr是合法的吗?我根本就没有得到它。

2 个答案:

答案 0 :(得分:3)

正如约翰尼指出的那样,这完全取决于内存所有权。如果将_ptr变量分配给_var变量,当_var变量超出范围时,内存将被删除,最好不要使用该_ptr变量。

在您提供的情况下,当您致电set时,您将提供指针类型为Impl1的对象。你仍然可以使用你拥有的那个,你可以调用Impl1::get但是因为你通过调用set给了该_ptr的对象所有权,如果该对象被删除,那么该指针所引用的内存也是如此。 / p>

答案 1 :(得分:1)

当前的IDL到C ++映射非常困难且令人困惑。一如既往,请咨询Henning& Vinowski书。

通常,对象引用执行此操作:

  1. 始终在函数参数中将对象引用作为_ptr类型传递。
  2. 但始终将它们(例如成员变量,局部变量)存储在_var类型中。