我在编写以下代码时注意到了
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_ptr
或T[]
T*
当然,这可以通过使用scoped / shared_array而不是指向数组的智能指针来解决,或者使用std::vector
时没有其他任何内容。
但这并不能解释为什么当T是一个数组时,shared_ptr指定不能指定operator*()
来返回T*
。
有人可以解释为什么T[]
专门处理boost::shared_ptr
?