gpt4 book ai didi

c++ - 为什么在 std::auto_ptr 上不允许使用 operator []

转载 作者:太空狗 更新时间:2023-10-29 19:41:00 24 4
gpt4 key购买 nike

为什么 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com