为什么不能将:: shared_ptr取消引用一个T []

时间:2015-05-15 08:20:54

标签: arrays c++11 boost shared-ptr

我在编写以下代码时注意到了

boost::shared_ptr<int[]> ptr(new int[5]);
int* deref = *ptr;

boost::shared_ptr<T>::operator*()要求T不是数组类型。

  

T & operator*() const; // never throws

     

要求: T不应是数组类型。存储的指针不能为0.

     

返回:对存储指针指向的对象的引用。

     

投掷:没有。

(正确)生成的编译器错误是可见的here

另一方面,

std::shared_ptr<T>::operator*()没有提出这样的要求,但shared_ptrT[]

似乎无法构建T*

当然,这可以通过使用scoped / shared_array而不是指向数组的智能指针来解决,或者使用std::vector时没有其他任何内容。

但这并不能解释为什么当T是一个数组时,shared_ptr指定不能指定operator*()来返回T*

有人可以解释为什么T[]专门处理boost::shared_ptr

0 个答案:

没有答案