为什么 std::auto_ptr 上不允许使用运算符 []?
#include <iostream>
using namespace std ;
template <typename T>
void foo( T capacity )
{
auto_ptr<T> temp = new T[capacity];
for( size_t i=0; i<capacity; ++i )
temp[i] = i; // Error
}
int main()
{
foo<int>(5);
return 0;
}
在 Microsoft Visual C++ 2010 上编译。
错误:错误 C2676:二进制“[”:“std::auto_ptr<_Ty>”未定义此运算符或转换为预定义运算符可接受的类型
最佳答案
原因是 auto_ptr
将使用 delete
而不是 delete[]
释放内容,所以 auto_ptr
不适用于处理堆分配数组(使用 new[]
构造),仅适用于处理使用 new
构造的单个堆分配数组。
支持 operator[]
会鼓励开发人员将它用于数组,并且会错误地给人一种印象,即该类型可以支持数组,而实际上它不能。
如果你想要一个类似智能指针的数组类,使用boost::scoped_array .
关于c++ - 为什么在 std::auto_ptr 上不允许使用 operator [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346389/