0

acapiから動的配列へのポインターを受け取るコンテナークラスがあります。このクラスはバッファの所有者になり、delete[]を使用して削除する必要があります。

したがって、このバッファは次のように作成された可能性があります。

Value * ptr = malloc(10 * sizeof(Value));

また、単一の値を操作するValueWrapperというクラスもあります。

私のコンテナには、ValueWrapperオブジェクトを返すゲッターがあります。

ValueWrapper Container::valueWrapper(int index)
{
    return ValueWrapper(_value[index]);
}

ただし、コンテナが破棄されると、タイプVWrapperのオブジェクトの値*は無効になります。

この問題にどのように対処できますか?何らかの方法でValue*の所有権を共有する必要があります。ValueWrapperオブジェクトは、コンテナーがスコープ内にある場合にのみ使用できると主張し、これをContainer :: valueWrapper(int index)のコメントに書き込むのは合理的でしょうか?

4

1 に答える 1

5

共有所有権が必要な場合は、配列をstd :: shared_ptrの配列に解凍し、削除を削除できます。C ++ 11をサポートしていない場合は、boost::shared_ptrまたはを使用できますstd::tr1::shared_ptr

于 2012-08-16T08:01:53.597 に答える