代码之家  ›  专栏  ›  技术社区  ›  Danra Bathsheba

用作用域/array包装分配的输出参数

  •  0
  • Danra Bathsheba  · 技术社区  · 15 年前

    所以, 我有如下代码:

    byte* ar;
    foo(ar) // Allocates a new[] byte array for ar 
    ...
    delete[] ar;
    

    为了更安全,我使用了一个作用域数组:

    byte* arRaw;
    scoped_array<byte> ar;
    foo(arRaw);
    ar.reset(arRaw);
    ...
    // No delete[]
    

    问题是,是否有任何现有方法可以仅使用作用域数组而不使用临时原始数组来完成此操作?

    我可能可以编写一个就地“resetter”类,只是想知道这个功能是否存在,而我错过了它。

    谢谢, 丹

    1 回复  |  直到 13 年前
        1
  •  0
  •   Stephen Nutt    15 年前

    为什么不能将对作用域数组的引用传递给foo并在foo内部调用reset?

    或者让foo返回boost::shared_array/ptr,如下所示

    boost::shared_array<byte> foo()
    {
      boost::shared_array<byte> a (new byte[100]);
      return a;
    }
    
    boost::shared_array<byte> ar = foo();
    

    编辑:

    既然你不能改变foo,那么下面的呢?

    byte* rawArray;
    foo (rawArray);
    boost::scoped_array<byte> array (rawArray);
    

    或者,可以按如下方式重载foo

    boost::shared_array<byte> foo()
    {
        byte* rawArray;
        foo (rawArray);
        return boost::shared_arry<byte> (rawArray);
    }
    

    然后使用重载版本,如下所示

    boost::shared_array<byte> array = foo();