Co to jest konstruktor kopii?

Konstruktor kopiujący to specjalna funkcja w C++ i innych językach, na które ma wpływ C++, która kopiuje obiekt kodujący. Programista robi to, dodając deklarację konstruktora kopiującego i odwołując się do obiektu. Przede wszystkim przynosi to korzyści programiście poprzez oszczędność czasu, ale zapewnia również, że programista nie wprowadzi niepoprawnie kodu obiektu. Kiedy kopia jest tworzona, musi mieć inny wskaźnik pamięci lub będzie wskazywać tę samą sekcję, na którą wskazuje oryginalny obiekt. Jedną z głównych wad używania konstruktorów kopiujących jest to, że nie mogą one działać niezależnie; jeśli oryginalny obiekt zostanie skasowany, kopia również zostanie skasowana.

Kiedy programista używa konstruktora kopiującego, mówi kodowi, aby skopiował obiekt już wymieniony w kodzie. Aby to zrobić, programista musi najpierw użyć deklaracji, aby powiedzieć kodowi, aby wykonał funkcję kopiowania. Programista musi również odwoływać się do innego obiektu, więc obiekt musi być już zbudowany lub nie będzie możliwości wykonania kopii.

Główną zaletą korzystania z konstruktora kopiującego jest oszczędność czasu. Zamiast wpisywać ponownie te same funkcje i kodować od nowa, programista może po prostu dodać odwołanie i obiekt będzie gotowy. Ma to kolejną ukrytą korzyść w postaci spójnego i dokładnego kodowania. Dopóki oryginalny obiekt jest prawidłowo zakodowany, kopiowany obiekt również będzie miał prawidłowe kodowanie. Obie te korzyści są najbardziej widoczne w przypadku złożonych obiektów, ale programiści mogą również skorzystać na kopiowaniu prostych obiektów.

W językach C++ wiele funkcji wymaga wskaźnika pamięci. To mówi funkcji dokładnie, gdzie szukać w pamięci pewnych informacji lub gdzie może przechowywać dane. Programista musi określić nowy wskaźnik pamięci, gdy używany jest konstruktor kopiujący; w przeciwnym razie oba obiekty będą korzystać z tej samej przestrzeni pamięci. Na pozór może nie wydawać się to złe, ale może prowadzić do niespójności. Na przykład, jeśli oba obiekty mają ten sam wskaźnik, a jeden obiekt jest używany do przesyłania wniosków o pożyczkę, podczas gdy skopiowany obiekt służy do przesyłania wniosków o karty kredytowe, wszystkie wnioski o karty kredytowe będą przechowywane razem z wnioskami o pożyczkę.

Programiści muszą uważać na usuwanie obiektu, ponieważ obiekty konstruktora kopiującego nie mogą działać niezależnie. Jeśli programista usunie oryginalny obiekt, to skopiowany obiekt nie będzie miał do czego się odwoływać. Bez kodu do odniesienia skopiowany obiekt nie będzie w stanie wykonać swojego zadania i stanie się bezużyteczny.