在动态数组上共享所有权

时间:2012-08-16 07:58:15

标签: c++

我有一个容器类,它从c api接收指向动态数组的指针。然后该类成为缓冲区的所有者,必须使用delete []删除它。

所以这个缓冲区可能是按如下方式创建的:

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

我还有一个名为ValueWrapper的类,它在单个Value上运行。

我的容器有一个getter,返回ValueWrapper对象,如下所示:

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

但是,一旦我的容器被销毁,VWrapper类型的对象将具有无效的值*。

我该如何处理这个问题?我需要以某种方式分享Value *的所有权。坚持只有当Container在范围内时才能使用ValueWrapper对象并将其写入Container :: valueWrapper(int index)的注释中是否合理?

1 个答案:

答案 0 :(得分:5)

如果您想要共享所有权,那么您可以将数组解压缩为std::shared_ptr数组并删除删除。如果您没有C ++ 11支持,则可以使用boost::shared_ptrstd::tr1::shared_ptr