Я нашел этот вопрос Когда использовать предварительное объявление?, который полезен, но описателен. не предписывающий.
Мой сценарий обычно заключается в том, что я использую указатель на другой класс либо в качестве члена класса, либо в качестве аргумента функции, поэтому все, что мне нужно в заголовке, — это предварительное объявление (также в стороне, если бы я переключился на использование boost shared_ptr, они были бы совместим с использованием предварительных объявлений?). В настоящее время я просто включаю заголовки, но теперь мне интересно, следует ли мне использовать предварительные объявления.
Итак, мой вопрос: если я могу использовать предварительное объявление для класса, следует? Я надеюсь, что этот вопрос не является субъективным, но если нет ответа на лучший практический ответ, то каковы плюсы и минусы использования предварительных объявлений?
ОБНОВЛЕНИЕ
Просто чтобы расширить проблему с shared_ptr (сейчас я их не использую, но подумываю о переключении). Если бы я их использовал, я бы использовал практику определения типа shared_ptr внутри класса. Например.:
class Customer
{
public:
typedef std::tr1::shared_ptr<Customer> SharedPointer;
Customer() {}
virtual ~Customer() {}
virtual std::string GetName() const;
};
Кажется, это может сделать вещи более грязными. Будет ли это проблематично с предварительным объявлением, и если да, то есть ли простой обходной путь?