В C++ можно использовать предварительное объявление, чтобы разрешить указатели на неполный тип.
class A;
A *p;
Однако в некоторых случаях я хочу вместо этого объявить уникальный указатель, поэтому я использую
class A;
class A_Deleter { void operator()(A*); }
unique_ptr<A, A_Deleter> p;
Этого достаточно во многих случаях, но есть один существенный недостаток. В отличие от настоящего предварительного объявления, его нельзя написать дважды. т.е. пока этот код компилируется:
class A;
class A;
Этот не:
class A;
class A_Deleter { void operator()(A*); }
class A;
class A_Deleter { void operator()(A*); }
Как бы вы объявили удаляемый класс?