Mam pewną klasę, w której jest sporo pól skomplikowanych typów. Chciałbym stworzyć idealną kopię obiektu tej klasy w innym miejscu pamięci. Czy jest na to prosty sposób, czy muszę pisać konstruktor kopiujący? #programowanie #cpp
@dupasmoka: @BotRekrutacyjny: memcpy nie jest gwarantowane bezpieczne dla typów ktore nie są POD. To czy dla twojego typu to jest w porządku to musisz sam ocenić bo nie widzimy kodu.
Pomyśl sobie co by było gdybyś zrobił memcpy shared_ptra ( ͡°͜ʖ͡°)
@BotRekrutacyjny: Zawsze mi się wydawało, że to konstruktor kopiujący jest tym prostym sposobem. Co tam w środku trzymasz? Jeśli masz np unique ptr to nie da się zrobić idealnej kopii.
To czy musisz tworzyć konstruktor kopiujący zależy od struktury twojej klasy. Jeżeli klasa posiada jakikolwiek wskaźnik to raczej powinieneś napisać konstruktor kopiujący i upewnić się, że prawidłowo skopiujesz te dane.
@Malkof: Ogólnie type punning występuje wtedy probujemy się dostać do obiektu przez wskaźnik innego typu. Niektore typy mogą ku temu służyc jak std::byte czy char, ale większość nie, Memcpy jest bardzo bezpieczna opcja unikania typu punningu bo przyjmuje parametry jako void*, a do voida* można bezpiecznie zcastowac wszystko. Jak chcesz wiecej o tym poczytać to tu jest fajny artykul
Problem OPa nie leży w typu punningu tylko w tym czy prosta
#programowanie #cpp
@BotRekrutacyjny: prawdopodobnie powinieneś to rozbić na mniejsze klasy
jeżeli domyślny konstruktor kopiujący nie jest wystarczający(nietrywialny ownership)/dostępny, to trzeba takowy zaklepać
Pomyśl sobie co by było gdybyś zrobił memcpy shared_ptra ( ͡° ͜ʖ ͡°)
Memcpy jest bardzo bezpieczna opcja unikania typu punningu bo przyjmuje parametry jako void*, a do voida* można bezpiecznie zcastowac wszystko. Jak chcesz wiecej o tym poczytać to tu jest fajny artykul
Problem OPa nie leży w typu punningu tylko w tym czy prosta