Wpis z mikrobloga

#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.
  • 19
  • Odpowiedz
@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:

std::unique_ptr obiekt = new(wskaznik)
  • Odpowiedz
@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
  • Odpowiedz
@lionbest: @Kaczus2B: mając coś takiego:

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 ?
  • Odpowiedz
@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 ?

populacja::populacja(populacja &do_skopiowania)//konstrunktor kopiujacy
{
instancja *nowy = new instancja(do_skopiowania.insta);
insta = *nowy;
}
  • Odpowiedz
@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:

populacja::populacja(const populacja &do_skopiowania): //konstrunktor kopiujacy
    : // lista initializacyjna
    insta(  do_skopiowania.insta ) // wywołanie konstruktora kopiującego klasy instancja
{}

  • Odpowiedz
@lionbest: Moje nazewnictwo jest bardzo nieusystematyzowane i czasami sam mam z nim problem ( ͡° ʖ̯ ͡°), i udało mi się z tym już uporać ( ͡° ͜ʖ ͡°)
  • Odpowiedz