在 C++11 N3485 5.3.5.1 中它说:
[of
delete
] 的操作数应是指向对象类型或类类型的指针。如果是类类型,则操作数在上下文中转换为指向对象类型的指针。
这种用法的例子是什么(操作数是类类型)?
如果是类类型,则操作数在上下文中隐式转换为指向对象类型的指针。
因此,您可以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)到指针类型的类类型。