Share via


Zvláštní členské funkce

Speciální členské funkce jsou členské funkce třídy (nebo struktury), které kompilátor v některých případech automaticky generuje za vás. Tyto funkce jsou výchozí konstruktor, destruktor, konstruktor kopírování a operátor přiřazení kopírování a konstruktoru přesunutí a operátor přiřazení přesunutí. Pokud vaše třída nedefinuje jednu nebo více speciálních členských funkcí, může kompilátor implicitně deklarovat a definovat použité funkce. Implementace generované kompilátorem se nazývají výchozí speciální členské funkce. Kompilátor nevygeneruje funkce, pokud nejsou potřeba.

Výchozí speciální členovou funkci můžete explicitně deklarovat pomocí výchozího klíčového slova = default . To způsobí, že kompilátor definuje funkci pouze v případě potřeby stejným způsobem, jako kdyby funkce nebyla vůbec deklarována.

V některých případech může kompilátor generovat odstraněné speciální členské funkce, které nejsou definovány, a proto nelze volat. K tomu může dojít v případech, kdy volání konkrétní speciální členské funkce ve třídě nemá smysl vzhledem k jiným vlastnostem třídy. Pokud chcete explicitně zabránit automatickému generování speciální členské funkce, můžete ji deklarovat jako odstraněnou pomocí klíčového slova = delete .

Kompilátor generuje výchozí konstruktor, konstruktor, který nepřijímá žádné argumenty, pouze pokud jste nehlásili žádný jiný konstruktor. Pokud jste deklarovali pouze konstruktor, který přebírá parametry, kód, který se pokusí volat výchozí konstruktor způsobí, že kompilátor vytvoří chybovou zprávu. Výchozí konstruktor vygenerovaný kompilátorem provádí jednoduchou výchozí inicializaci objektu při výchozím nastavení člen-moudrý. Výchozí inicializace ponechá všechny členské proměnné v neurčitém stavu.

Výchozí destruktor provádí zničení objektu podle člena. Je virtuální pouze v případě, že je destruktor základní třídy virtuální.

Výchozí operace kopírování a přesouvání konstrukce a přiřazení provádějí kopie nebo přesuny nestatického datového člena. Operace přesunutí se generují pouze v případě, že nejsou deklarovány žádné destruktoru nebo operace přesunutí nebo kopírování. Výchozí konstruktor kopírování je generován pouze v případě, že není deklarován žádný konstruktor kopírování. Pokud je deklarována operace přesunutí, implicitně se odstraní. Výchozí operátor přiřazení kopírování se generuje pouze v případě, že není explicitně deklarován žádný operátor přiřazení kopírování. Pokud je deklarována operace přesunutí, implicitně se odstraní.

Viz také

Referenční dokumentace jazyka C++