Обертывание выделенных выходных параметров с массивом scoped_ptr / - PullRequest
0 голосов
/ 08 апреля 2010

Итак, У меня есть код, который выглядит следующим образом:

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

Чтобы сделать это безопаснее, я использовал scoped_array:

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

Вопрос в том, существует ли какой-либо способ сделать это, используя только scoped_array, без использования временного необработанного массива?

Я, вероятно, могу написать на месте класс "resetter", просто интересно, существует ли эта функциональность, и мне ее не хватает.

Спасибо, Dan

1 Ответ

0 голосов
/ 11 апреля 2010

Почему вы не можете просто передать ссылку на массив scoped в foo и вызвать reset внутри foo?

В качестве альтернативы, 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();

Edit:

Поскольку вы не можете изменить 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();
...