Подтвердить что ты не робот

С++ 11 Удалить тип класса?

В С++ 11 N3485 5.3.5.1 говорится:

Операнд [из delete] должен быть указателем на тип объекта или тип класса. Если тип класса, операнд преобразуется контекстуально в указатель на тип объекта.

Каков пример такого использования (операнд относится к типу класса)?

4b9b3361

Ответ 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) в тип указателя.