我很难在TR1文档中找到关于共享数组的参考资料。Boost文档非常清楚地说明了C++ "new“和"new[]”表达式之间的显著区别。shared_ptr模板旨在正确地持有指向使用"new“创建的动态分配对象的指针。使用"new[]“,shared_array模板可以正确地保存指向动态分配数组的指针。
我正在更新一些代码以使用TR1 shared_ptr模板和相关函数,但我没有发现提到shared_array。TR1 shared_ptr实现是否区分"new“和"new[]",并正确销毁这些指针?据我所知,从TR1规范来看,它似乎不是。如果是这样的话,我应该仍然使用boost shared_array模板来进行"new[]“样式的分配吗?
发布于 2009-03-09 19:31:21
这是正确的,在TR1中没有shared_array。
但是,如果您希望使用此构造函数,您可以提供自己的deleter对象来执行"delete []“:
template<class Other, class D>
shared_ptr(Other* ptr, D dtor);例如:
template<typename T>
struct my_array_deleter
{
void operator()(T* p)
{
delete [] p;
}
};
shared_ptr<int> sp(new int[100], my_array_deleter<int>());发布于 2009-03-09 19:32:22
我怀疑大多数使用TR1的人不使用数组,而是使用vector<>。
我还没有读过TR1,所以我会根据Boost来回答,这可能已经足够好了。boost::shared_ptr<>处理单个对象,而不是数组。这就是boost::shared_array<>的作用。
如果您正在使用数组,并且有理由转换为shared_array<>而不是vector<>,请使用shared_array<>。
https://stackoverflow.com/questions/627641
复制相似问题