Nie ma reguły. Bardziej sprawa przyzwyczajenia i konkretnego problemu.
Jak ktoś wywodzi się z Javy albo podobnych środowisk - najszybciej jak to się da ucieka z main() w klasy. Tu należą też programy C++ w Qt, gdzie main() ma na ogół z 5 linijek albo WxWidgets, gdzie main() jest generowany makrem wxIMPLEMENT_APP(klasaApp).
Jak ktoś się wywodzi z C albo podobnych środowisk, to traktuje klasy jako "śmieszne struktury z funkcjami" i oblatuje wszystko z main()-a albo zwykłych funkcji wołąnych z main()-a.
Z własnej praktyki - ja zawsze (czy C czy C++) schodzę z main()-em do minimum. W main() mam parsowanie argumentów (jeżeli trzeba), inicjalizowanie podstawowych struktur danych i od razu uciekam do właściwej funkcjonalności realizowanej jako osobna funkcja albo metoda. Jest to przydatne w testach jednostkowych, bo main()-a w prosty sposób nie da się testować (napisałem "w prosty" a nie "w ogóle nie da"!)