13

在 C++11 N3485 5.3.5.1 中它说:

[of delete] 的操作数应是指向对象类型或类类型的指针。如果是类类型,则操作数在上下文中转换为指向对象类型的指针。

这种用法的例子是什么(操作数是类类型)?

4

1 回答 1

10

如果是类类型,则操作数在上下文中隐式转换为指向对象类型的指针。

因此,您可以delete在对象上使用,但当且仅当此类型具有隐式转换运算符到指针时。

class A
{
public:
   class Inner {};
   A()
   {
      inner = new Inner();
   }
   operator Inner*() { return inner; }
private:
   Inner* inner;
};

int main()
{
   A* a = new A();
   delete *a;
   delete a;
}

但是,它不是 C++11 的新特性,在 C++03 标准中几乎有相同的词

操作数应具有指针类型,或具有单个转换函数(12.3.2)到指针类型的类类型。

于 2013-05-16T11:08:26.977 回答