我有一个班级:
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
是合法的吗?我根本就没有得到它。
答案 0 :(得分:3)
正如约翰尼指出的那样,这完全取决于内存所有权。如果将_ptr变量分配给_var变量,当_var变量超出范围时,内存将被删除,最好不要使用该_ptr变量。
在您提供的情况下,当您致电set
时,您将提供指针类型为Impl1
的对象。你仍然可以使用你拥有的那个,你可以调用Impl1::get
但是因为你通过调用set
给了该_ptr的对象所有权,如果该对象被删除,那么该指针所引用的内存也是如此。 / p>
答案 1 :(得分:1)
当前的IDL到C ++映射非常困难且令人困惑。一如既往,请咨询Henning& Vinowski书。
通常,对象引用执行此操作:
_ptr
类型传递。_var
类型中。