Wpis z mikrobloga

#cpp #programowanie

https://github.com/esp8266/Arduino/blob/master/cores/esp8266/WString.cpp

Przyrdzewiałem dosyć mocno ostatnio z C++, ale czy aby konstruktor kopiujący nie robi tutaj płytkiego kopiowania?

String::String(const String &value) {
init();
*this = value;
}

Nie wczytywałem się za bardzo, ale zapewne wewnętrzny bufor String to jakaś tablica charów, więc jeśli zrobimy to w ten sposób to chyba przepiszemy adres tej tablicy do nowego obiektu i zmiany w starym obiekcie będą się propagować do nowego...
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Saly: No faktycznie, pod operatorem jest schowane przepisywanie bufora (zapomniałem, że w C++ można operator = przeciążać). To czemu w takim razie chłopakom się tam coś ciągle wysrywało w tym arduinowym Stringu i jak zrezygnowali z konstruktora kopiującego (w sumie to ogólnie się chyba w------i i przeszli na const chary xD), to nagle zaczęło działać? Hm... Kompilator zesrany?
  • Odpowiedz
@Saly: A to bym się musiał kolegi w poniedziałek zapytać, bo ja nie od embedded. Spojrzałem do biblioteki, bo była coś mowa o tym, że konstruktor kopiujący robi problemy i wywalenie go wpiździec przestało wywoływać anomalie.

Tam była chyba taka sytuacja, że pomimo teoretycznego skopiowania obiektu, w innym miejscu chcąc wysłać jego zawartość nie wysyłało się nic. Niby pachnie to zdjęciem ze stosu obiektu macierzystego a razem z nim bufora
  • Odpowiedz