Udostępnij przez


Specjalne funkcje składowe

Specjalne funkcje składowe to funkcje składowe klasy (lub struktury), które w niektórych przypadkach kompilator automatycznie generuje. Te funkcje są domyślnym konstruktorem, destruktorem, konstruktorem kopii i operatorem przypisania kopiowania oraz konstruktorem przenoszenia i operatorem przypisania przenoszenia. Jeśli klasa nie definiuje co najmniej jednej specjalnej funkcji składowej, kompilator może niejawnie zadeklarować i zdefiniować używane funkcje. Implementacje generowane przez kompilator są nazywane domyślnymi specjalnymi funkcjami składowymi. Kompilator nie generuje funkcji, jeśli nie są potrzebne.

Możesz jawnie zadeklarować domyślną specjalną funkcję składową przy użyciu słowa kluczowego = domyślne . Powoduje to, że kompilator definiuje funkcję tylko w razie potrzeby, tak samo jak w przypadku, gdy funkcja nie została zadeklarowana w ogóle.

W niektórych przypadkach kompilator może wygenerować usunięte specjalne funkcje członkowskie, które nie są zdefiniowane i dlatego nie można ich wywołać. Może się tak zdarzyć w przypadkach, gdy wywołanie określonej funkcji specjalnej składowej w klasie nie ma sensu, biorąc pod uwagę inne właściwości klasy. Aby jawnie zapobiec automatycznemu generowaniu specjalnej funkcji składowej, można zadeklarować ją jako usuniętą przy użyciu słowa kluczowego = delete .

Kompilator generuje konstruktor domyślny, konstruktor, który nie przyjmuje żadnych argumentów, tylko wtedy, gdy nie zadeklarował żadnego innego konstruktora. Jeśli zadeklarowaliśmy tylko konstruktor, który przyjmuje parametry, kod, który próbuje wywołać konstruktor domyślny, powoduje, że kompilator generuje komunikat o błędzie. Domyślny konstruktor wygenerowany przez kompilator wykonuje proste inicjowanie domyślne elementu członkowskiego. Inicjowanie domyślne pozostawia wszystkie zmienne składowe w stanie nieokreślonym.

Domyślny destruktor wykonuje destruktor mądry składowych zniszczenia obiektu. Jest to wirtualne tylko wtedy, gdy destruktor klasy bazowej jest wirtualny.

Domyślne operacje kopiowania i przenoszenia konstrukcji i przypisania wykonują kopie lub przenoszenie elementów niestacjonanych elementów członkowskich danych. Operacje przenoszenia są generowane tylko wtedy, gdy nie zadeklarowano operacji destruktora ani przenoszenia ani kopiowania. Domyślny konstruktor kopiowania jest generowany tylko wtedy, gdy konstruktor kopiujący nie jest zadeklarowany. Jest on niejawnie usuwany, jeśli zadeklarowano operację przenoszenia. Domyślny operator przypisania kopiowania jest generowany tylko wtedy, gdy żaden operator przypisania kopiowania nie jest jawnie zadeklarowany. Jest on niejawnie usuwany, jeśli zadeklarowano operację przenoszenia.

Zobacz też

Dokumentacja języka C++