Tak, specjalna funkcja składowa może być domyślnie zdefiniowana poza linią w pliku .cpp. Uświadom sobie, że niektóre właściwości funkcji wbudowanej domyślnie nie będą miały zastosowania do twojej klasy. Na przykład, jeśli twój konstruktor kopiowania jest domyślnie zdefiniowany poza linią, twoja klasa nie będzie uważana za trywialnie kopiowalną (co również dyskwalifikuje to, że nie zostanie rozpoznany jako POD). Podobnie, domyślny destruktor typu out-of-line zdyskwalifikuje twój typ z bycia trywialnym (lub POD).
Może to być użyteczne, jeśli chcesz mieć wbudowany konstruktor kopii i kontrolę nad tym, gdzie jest on zdefiniowany (być może w celu przejęcia kontroli nad wygenerowanymi definicjami szablonów będzie to konieczne), ale nie chcesz go ręcznie definiować się z ręcznie spreparowaną listą inicjalizującą członków, która byłaby pracochłonna i mogłaby przestać działać w ramach konserwacji.
To jest w porządku, standard używa go nawet w przykładzie ("§8.4.2/3"). '= default' i' = delete' są po prostu "normalnymi" ciałami funkcyjnymi (w każdym razie według specyfikacji), tj. co napiszesz w * definicji *. – Xeo
Należy zauważyć, że domyślna definicja może pojawić się po pierwszej deklaracji funkcji, podczas gdy usunięta definicja musi być pierwszą deklaracją funkcji. – MWid
@Xeo Brzmi jak odpowiedź. –