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