_ptr或_var语言 - 哪一个用作类字段以及原因



我有一个类:

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 类型的字段并在 setter 中返回_ptr是否合法?我只是根本不明白。

正如约翰尼指出的那样,这一切都与内存所有权有关。如果将_ptr变量分配给_var变量,则当_var变量超出范围时,内存将被删除,最好不要使用该_ptr变量。

在您提供的情况下,当您调用set时,您将为指针类型Impl1的对象提供所有权。 您仍然可以使用您拥有的那个,您可以调用Impl1::get但是由于您通过调用set赋予了该_ptr的对象所有权,如果该对象被删除,则该指针引用的内存也会被删除。

当前的 IDL 到 C++ 映射非常困难且令人困惑。与往常一样,请查阅Henning&Vinowski的书。

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

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

相关内容

  • 没有找到相关文章

最新更新