#programowanie #cpp czy przy pomocy memcpy() jestem wstanie zrobić hardą kopie obiektu mojej klasy, która zawiera obiekt innej klasy a ten dynamiczne 2 wymiarowe tablice ? może robię coś źle gdyż kopiuje mi jedynie adres.
@levil: Nierób tego. Masz od tego kontruktor kopiujący. No chyba że nauczysz się używac static_assert i sprawdzisz czy klasa jest POD (Plain Old Data) inaczej nawet nie myśl żeby w C++ memcpy korzystać.
static_assert(std::is_pod::value, "Odmawiam użycia memcpy!"); Jeżeli assert się nie powiedzie, to niema rady musisz użyć konstruktora. Jak masz do dyspozycji tylko wskaźnik i tam musisz z jakiegoś powodu stworzyć obiekt to używasz opeartora new inplace:
@lionbest: W osobnej zmiennej przechowuje najlepsze rozwiązanie z populacji, a populacja przechodzi przez różne zmiany i wszystko w środku ulega zmianom, więc muszę zrobić deep copy
klasa2{ klasa 1 obiekt } muszę dla obu klas robić konstruktor kopiujący ? czy tworząc nowy obiekt klasy 2 będę miał od razu miejsce na elementy klasy 1 ?
@Kaczus2B: @lionbest: jak zainicjować wywołanie konstruktora kopiującego dla obiektu klasy 1 patrząc na poprzedni schemat ? Pewnie dla was głupie pytanie, ale nigdy jeszcze nic podobnego nie robiłem. na takiej zasadzie ?
@levil: Parametr musi być koniecznie const. Co to jest insta? Compozycja klasy instancja? Jeżeli to zwykły obiekt to ten konstruktor w ogóle ci nie będzie potrzebny, domyślny zrobi to za ciebie. Dokładniej domyślny zrobi tak:
static_asserti sprawdzisz czy klasa jest POD (Plain Old Data) inaczej nawet nie myśl żeby w C++ memcpy korzystać.static_assert(std::is_pod::value, "Odmawiam użycia memcpy!");Jeżeli assert się nie powiedzie, to niema rady musisz użyć konstruktora. Jak masz do dyspozycji tylko wskaźnik i tam musisz z jakiegoś powodu stworzyć obiekt to używasz opeartora new inplace:
std::unique_ptr obiekt =klasa2{klasa 1 obiekt
}
muszę dla obu klas robić konstruktor kopiujący ? czy tworząc nowy obiekt klasy 2 będę miał od razu miejsce na elementy klasy 1 ?
Jeśli tworzone dynamicznie to tak, jesli wektory, to wystarczy przypisać
populacja::populacja(populacja &do_skopiowania)//konstrunktor kopiujacy{
instancja *nowy = new instancja(do_skopiowania.insta);
insta = *nowy;
}
Co to jest insta? Compozycja klasy instancja? Jeżeli to zwykły obiekt to ten konstruktor w ogóle ci nie będzie potrzebny, domyślny zrobi to za ciebie. Dokładniej domyślny zrobi tak:
populacja::populacja(const populacja &do_skopiowania): //konstrunktor kopiujacy: // lista initializacyjna
insta( do_skopiowania.insta ) // wywołanie konstruktora kopiującego
Komentarz usunięty przez autora