0

したがって、次のようなコードがあります。

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 だけを使用してこれを行う既存の方法があるかどうかです。

機能が存在するかどうか疑問に思っているだけで、おそらくインプレースの「リセッター」クラスを作成できますが、それがありません。

ありがとう、ダン

4

1 に答える 1

0

スコープ付き配列への参照を foo に渡して、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();

編集:

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();
于 2010-04-10T23:18:11.213 に答える