【发布时间】:2012-08-09 21:42:45
【问题描述】:
我有一堂课:
class Impl1 : public POA_I1
{
private :
Impl2_var ob;
public :
Impl2_ptr get();
{
return ob;
}
void set(::Impl2_ptr ob)
{
this->ob = ob;
}
};
我对@987654323@ 和_var 有点困惑。我读到了
MyObject_var 对象引用类型的 _var 版本充当 以与 _ptr 引用大致相同的方式处理 toproxy,但还添加了 内存管理。像所有 _var 类型一样,一个 _var 引用负责 释放其底层实例(在这种情况下,代理 实例)当引用超出范围时。两个 _ptr 引用 和 _var 引用允许客户端访问代理上的操作 实例
但我不明白何时使用每个以及为什么。我的意思是,在我的实现中 = 我应该使用哪一个,_var 或 _ptr,为什么?在类中拥有_var 类型的字段并在setter 中返回_ptr 是否合法?我只是不明白。
【问题讨论】:
-
_var 的行为类似于 auto_ptr。通常我们使用 _var 作为成员,传递 _ptr。您必须在正确的地方使用 _duplicate(),这需要时间来学习。另一种选择是 IDL 到 C++11 语言的映射,它更易于使用,有关更多详细信息,请参阅orbzone.org。
-
我建议您检查一些现有的 CORBA 示例,这些示例随omniORB 或例如TAO 一起提供。了解人们如何创建测试并从中学习。对于 _ptr/_var 的使用,也可以与 valgrind 一起运行,以确保您没有任何内存泄漏。
-
@Johnny Willemsen:是的,我看过 orbzone.org,它看起来非常棒,而且 imo 比旧映射更容易使用。我还有一个问题。将
_ptr分配给其他_ptr是否合法?我读过将_var分配给_var是非法的(我只需要使用_duplicate()来做)但我没有发现任何关于将_ptr分配给_ptr -
是的,我相信这是合法的。但我也认为将
_var分配给_var是合法的 -
将 _var 分配给 _var 是合法的,但棘手的部分是此时引用计数不会增加。在那个时候使用 _duplicate() 是更常见的 CORBA 编程。也允许将 _ptr 分配给 _ptr。