Я предпочитаю помещать их в файл .cpp ради быстрого времени компиляции / компоновки. Даже крошечные однострочники (пустые виртуальные деструкторы!) Могут взорвать ваше время компиляции, если они будут созданы много. В одном проекте я мог сократить время компиляции на несколько секунд, переместив все виртуальные деструкторы в файлы .cpp.
С тех пор я продан на этом, и я бы снова поместил их в заголовок, только если профилировщик скажет мне, что я могу получить прибыль от встраивания. Единственным недостатком является то, что вам нужно больше печатать, но если вы создаете файл .cpp при написании заголовка, вы часто можете просто скопировать и вставить объявления и заполнить их в файле .cpp, так что это не так уж и плохо. Хуже, конечно, если позже вы обнаружите, что хотите переместить материал в файл .cpp.
Приятным побочным эффектом является то, что чтение становится проще, когда в заголовке есть только документация и объявления, особенно если к проекту присоединяются новые разработчики.