假设我们在分配给堆空间的内存指针列表上有一个迭代器(iter),如果我这样做的话
delete (*iter++)
我的优先级是首先取消引用迭代器以获取内存地址然后释放空间然后递增迭代器以释放下一个元素,这是对的吗?
假设我们在分配给堆空间的内存指针列表上有一个迭代器(iter),如果我这样做的话
delete (*iter++)
我的优先级是首先取消引用迭代器以获取内存地址然后释放空间然后递增迭代器以释放下一个元素,这是对的吗?
尽管++
具有比 更高的优先级*
,但后增量的副作用++
是在取消引用运算符*
使用了迭代器的值之后应用的。这是后增量或后缀的行为++
(与前增量或前缀相反++
)。此规则适用于迭代器以及“普通”指针。
效果如您所写,但使用稍微不同的顺序实现:
后增量具有最高优先级,因此首先对其进行评估。但是,它的返回值(由进一步的运算符处理)是增量iter
之前的值。
接下来评估取消引用,返回未递增值iter
“指向”的指针。
delete
最后评估,并删除指针。
优先级实际上是相反的,如果迭代器是类类型(带有重载运算符),这是对运算符函数的调用顺序:
iter
用于调用的列表项的值。该行等效于:
delete (*(iter++))
但是由于后缀增量返回原始值,您仍然取消引用iter
. 因此,如果iter
指针指向一个动态分配的对象,delete
就会销毁该对象。然后iter
将左指针指向下一个指针。