Khaine
#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...
  • Najlepsze
  • Wszystkie komentarze
Khaine
Khaine Autor
1
@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
Saly
Saly
0
@Khaine: przejdz do operator= (linia 254) następnie do copy (203). Mocno się nie wgłębiam, ale wygląda poprawnie
Khaine
Khaine Autor
0
@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?
Saly
Saly
0
@Khaine: masz gdzieś link do czegoś, co opisuje problem. W jaki sposób sie wysrywało?