[C++] Dealokacja dynamicznych łańcuchów string
Ostatnio zmodyfikowano 2014-11-10 12:58
Kopczak1995 Temat założony przez niniejszego użytkownika |
[C++] Dealokacja dynamicznych łańcuchów string » 2014-11-10 11:37:00 Witam. Bawiłem się dzisiaj w alokowanie łańcuchów znaków i w pewnym momencie zwątpiłem. O tyle jeśli zaalokuję sobie łańcuch znaków w stylu C to usuwanie nie jest dla mnie zagadką, bo to zwykła tablica znaków. Wiadomo, wygląda to tak: char * ch = new char[ rozmiar * sizeof( int ) ]; delete[] ch;
Jednak jak to działa w przypadku łańcuchów z biblioteki #include string ? Czy mam traktować je podobnie jak tablice char, czy może typ string się czymś różni? Zwątpiłem szczerze i nie wiem czy mam to usuwać jak pojedynczą zmienną czy właśnie jako tablicę...
string * str = new string[ rozmiar * sizeof( int ) ]; delete[] str;
delete str;
Proszę o pomoc, bo z lekka zgłupiałem :P @Edit Sorki, źle zapisałem... Trochę się zagalopowałem :D Dzięki @1aam2am1 :) Chodziło mi o taki kod: string * str = new string; delete[] str;
delete str;
|
|
1aam2am1 |
» 2014-11-10 11:41:46 Pierwszy i drugi przykład jest zły.
W pierwszym poco mnożysz rozmiar i wielkość int
W drugim string to lista przechowująca txt więc szczerze niewiem co chcesz zrobić. Zmienną przechowująca txt, czy może tablice tych zmiennych. |
|
Kopczak1995 Temat założony przez niniejszego użytkownika |
» 2014-11-10 12:50:00 A, sorki zagalopowałem się trochę z tym rozmiarem :P U siebie alokowałem stringa tak: string * text = new string; Przez przypadek źle zapisałem, nigdy tak normalnie nie alokowałem stringa :D Chodzi mi tylko o to jak mam zwolnić pamięć po stringu. Traktować go jak tablicę czyli: delete[] str; czy jak pojedynczą zmienną: delete str; Kompilator mi niestety nie wypluwa błędu, więc nie wiem :/ |
|
1aam2am1 |
» 2014-11-10 12:52:46 Alokujesz zmienną zwalniasz zmienną.
String to zmienna nie tablica więc delete str; |
|
Kopczak1995 Temat założony przez niniejszego użytkownika |
» 2014-11-10 12:54:26 Hmmm... Czyli o ile nie używam podczas alokacji nawiasów klamrowych to mogę bezpiecznie traktować ten obiekt jako zwykłą zmienną?
@Edit Acha, rozumiem. Dzięki za pomoc :) |
|
Jacob99 |
» 2014-11-10 12:55:10 Jeśli alokujesz tablicę to dealokujesz tablicę (delete[]) Jeśli alokujesz zmienną to dealokujesz zmienną (delete);
A tak w ogóle to po co ci dynamiczna alokacja stringów? A jeśli jest niezbędna to czemu nie użyjesz vectora? |
|
Kopczak1995 Temat założony przez niniejszego użytkownika |
» 2014-11-10 12:58:14 Jeszcze klasy vector nie miałem okazji używać. String jest mi bardziej przyjazny póki co :P A używam, bo próbuję się nauczyć korzystania wyłącznie ze zmiennych dynamicznych i tyle. Nie ma tu jakiegoś głębszego powodu. Niemniej jednak dowiedziałem się już czego chciałem i dziękuje wszystkim za pomoc :) Miałem po prostu problem, bo słyszałem, że wewnętrznie stringi są tablicami i nie byłem pewien czy dobrze czynię...
@Edit Dowiedziałem się czego chciałem, więc kulturalnie zamknę temat. Jeszcze raz dzięki za pomoc :) |
|
« 1 » |