Ответ 1
Если тип класса, операнд контекстно-косвенно преобразуется в указатель на тип объекта.
Итак, вы можете использовать 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;
}
Однако, это не новая функция С++ 11, в стандарте С++ 03 есть почти такие же слова
Операнд должен иметь указатель тип или тип класса, имеющие одну функцию преобразования (12.3.2) в тип указателя.