Programowanie obiektowe, C++
Składowe tworzone przez kompilator
[lekcja] 10. Składowe tworzone przez kompilatorSkładowe tworzone przez kompilator
Kompilator może, dla prostych klas, utworzyć konstruktor domyślny, kopiujący i operator przypisania (jeśli nie zostały już utworzone):
#include <iostream>
class Klasa
{
public:
int x;
};
int main()
{
Klasa k1;
k1.x = 5;
Klasa k2( k1 );
std::cout << k1.x << " " << k2.x << std::endl;
k2.x = 2;
k1 = k2;
std::cout << k1.x << " " << k2.x << std::endl;
}
5 5
2 2
Jeżeli naszym celem jest utworzenie prostej, niekopiowalnej klasy, trzeba uniemożliwić automatyczne utworzenie konstruktora kopiującego i operatora przypisania. Jednym ze sposobów jest określenie konstruktora kopiującego i operatora przypisania jako prywatne lub chronione. Nie muszą być zdefiniowane:
class Klasa
{
public:
int x;
Klasa() { }
private:
Klasa( const Klasa & );
Klasa & operator =( const Klasa & );
};
To rozwiązanie ma poważną wadę: jeśli funkcja lub metoda klasy zaprzyjaźnionej spróbuje skopiować obiekt tej klasy, błąd pojawi się dopiero na etapie łączenia, czyli po skompilowaniu wszystkich plików programu. Rozwiązaniem jest określenie konstruktora kopiującego i operatora przypisania jako usuniętych:
class Klasa
{
public:
int x;
Klasa() { }
Klasa( const Klasa & ) = delete;
Klasa & operator =( const Klasa & ) = delete;
};
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.