Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dealokacja dynamicznych łańcuchów string

Ostatnio zmodyfikowano 2014-11-10 12:58
Autor Wiadomość
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:
C/C++
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ę...

C/C++
string * str = new string[ rozmiar * sizeof( int ) ];
delete[] str;
//czy może
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:
C/C++
string * str = new string;
delete[] str;
//czy może
delete str;
//???
P-120275
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.
P-120276
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 :/
P-120278
1aam2am1
» 2014-11-10 12:52:46
Alokujesz zmienną zwalniasz zmienną.

String to zmienna nie tablica więc
delete str;
P-120279
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 :)
P-120280
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?
P-120281
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 :)
P-120282
« 1 »
  Strona 1 z 1