2

虽然存在boost::shared_ptr( QSharedPointer) 的等价物,但我无法找到类似的东西boost::shared_array

当然我可以使用类似的东西

QSharedPointer<const std::vector<T> > shared_vector_ptr(new std::vector<T>(
       reinterpret_cast<T*>(pBuffer),
       reinterpret_cast<T*>(pBuffer+length)
));    

但我想知道是否存在提供T& operator[](size_t)使用delete[]而不是delete. 我不愿意在这个项目中使用 boost,因为目标机器无法安装 boost,并且项目是按源分发的。

注意:我知道我可以使用 指定删除器QSharedPointer::QSharedPointer ( T * ptr, Deleter deleter ),但是我不喜欢这种方法,因为编译器不会强制您指定删除器,这会导致new []分配的块被delete.

4

1 回答 1

1

我认为最近的是QScopedArrayPointer,但它当然是有范围的。

QSharedPointer子类化以静默添加您自己的隐藏Deleter调用delete[](并添加一个)将是一件小事operator[],这样用户就不必做任何思考,并且它仍然使用 Qt 本机代码 - 您只是将它整齐地包装起来。

于 2012-07-04T09:03:29.147 回答