
Mirki zrobiłem taką klase https://pastebin.com/GCDxCB50 do której mam dodać metodę Array* clone(); – wykonuje głęboką kopię naszego obiektu przy pomocy dynamicznej allokacji. W jaki sposób to osiągnąć próbowałem
i wtedy przepisać dane ale niestety to nie działa ( ͡° ʖ̯ ͡°)
i czy dobrze mam wykonany destruktor?
#programowanie #cplusplus #cpp
Array* copy= new Array(size_of_tab);i wtedy przepisać dane ale niestety to nie działa ( ͡° ʖ̯ ͡°)
i czy dobrze mam wykonany destruktor?
#programowanie #cplusplus #cpp
- Najlepsze
- Wszystkie komentarze






Metoda clone to właściwie konstruktor kopiujący, a w przypadku składników - danych wskaźników różnica polega na tym, że wskaźnik nie może bezmyślnie pokazać na to samo miejsce w pamięci, co nie? Bo zonk będzie. Tworzysz więc nowy obszar w pamięci (jak w konstruktorze), na który pokazuje nowy wskaźnik i dopiero wtedy przepisujesz
W konstruktorze jest domyślna wartość, ale przy tworzeniu klasy można nadać jej dowolną wielkość lub pozostawić domyślną.
size_of_tabdo przestrzeni private.Alokacja nowej pamięci o rozmiarze taki jaki my posiadamy.
Sprawdzenie czy Alokacja się
Array copy = Array(size)
Tworzenie tabeli przez new masz w konstruktorze.
Tam jest kilka błędów, bo jak tworzysz tablice new int(n), to jej maksymalny index to n-1, nie n (back, sprawdzenie w get)
Komentarz usunięty przez autora
po new proponuje tez uzywac memset'a na takich tablicach
Komentarz usunięty przez autora
A dwa nadal kurde nie potrafie zrozumieć jak napisać tą metodę wykonująca głęboką kopie (nie wiem czy to skutek już okropnego zmęczenia czy po prostu jestem tępy :/). Mógłbyś mi to bardziej
w clone() zwracam wskaźnik do nowozaalkowanej klasy o rozmiarze tablicy wpisanej przez konstruktor, potem mając wskaźnik do tej klasy kopiuje zawartość klasy z której została ta metoda wywołana i zwracam ostatecznie wskaźnik do tej "nowej" klasy.
(chyba że mam zaalokować coś w stylu
Array* copy= new Array;i wtedy dopiero dokonać copy->tab= new int(sizeoftab) ?)Array* clone(){Array* copy= new Array(size_of_tab);alokuje pamięc z konstruktorem równym co do wartości mojego const'afor(int