2013-04-11 18 views

Odpowiedz

7

Z std::string, to zupełnie w porządku, ponieważ std::string zarządza własną pamięcią.

Z ciągami w stylu c używając char*, musisz zarządzać własną pamięcią.

+0

Dzięki! Miałem nadzieję, że to będzie takie proste. – Tez

+2

Jest to główny powód, dla którego 'string' został dodany do biblioteki. – Barmar

1

Korzystanie string daje luksus posługiwaniu się nim, podobnie jak innych prymitywnych typów danych, takich jak intfloat itp

int a = 3; można składać do a = 5 lub a += 3 bez szkody

samo dotyczy

string myString = "Hello"; 

myString = "Hello World"; 

myString+= " World"; 
+0

Nie sądzę, że to prawda. unsigned char na przykład tylko do 255. Dosyć więcej i to nie zadziała. Za pomocą łańcuchów możesz dodawać tyle, ile chcesz (aż do wyczerpania pamięci komputera). Chociaż domyślam się tylko, że jestem nowy w C++. Dodając 3 do liczby całkowitej, jak w twoim przykładzie, zmieniasz tylko wartość przechowywaną, nie zwiększasz pojemności "int". – Tez

+0

@Tez Tak, przykro mi, że nie wyjaśniłem tego. Nie chciałem zwiększać 'size'' int' przez doin '+ = 3'. Chciałem wskazać, że z 'std :: string' możesz zmienić dane przechowywane w łańcuchu używając' + 'itp. Z' char * 'etc musimy użyć' strcat() '... –

+0

Ah ok. Nic się nie stało :) – Tez

5

std ciąg jest jak każda inna klasa kontenerowa jak wektor. Mają również ciągłą strukturę pamięci i kiedy potrzebują dodatkowej przestrzeni, po prostu przenoszą pamięć dla siebie.

Jeśli pracujesz z częstymi aktualizacjami napisów i twoje łańcuchy będą rosły w czasie, możesz wywołać metodę string :: reserve(), aby wstępnie przydzielić trochę pamięci dla twoich ciągów, aby nowe wstawienia nie powodowały ruchów pamięci masowych

+0

masz na myśli * ciągłą * pamięć zamiast * zakaźną *? – Default

+0

@Default przykro mi, mam na myśli ciągłe –

Powiązane problemy