Использование предварительных объявлений улучшает разъединение . Если вы можете избежать включения "A.h"
с помощью предварительного объявления, рекомендуется использовать предварительное объявление. Это лучше не только потому, что ваши сборки выполняются быстрее (в конце концов, предварительно обработанные заголовки могут иметь дело с эффективностью компилятора), но и потому, что это говорит читателям вашей декларации, что структура вашего класса B
не зависит от знания чего-либо о вашем класс A
, кроме существующего *.
РЕДАКТИРОВАТЬ (чтобы ответить на ваш вопрос) Единственный недостаток, который я знаю, состоит в том, что вы не можете использовать их во всех ситуациях: например, объявление, подобное этому:
class B
{
A myA[10];
};
не будет компилироваться, потому что компилятору нужно знать размер A
. Тем не менее, компилятор находит такие проблемы очень надежно и сообщает вам о них недвусмысленно.
* Реализация класса B
вполне может зависеть от знания деталей класса A
. Однако эта зависимость становится деталью реализации B
, скрытой от пользователей вашего класса; Вы можете изменить его в любое время, не нарушая код, зависящий от класса B
.