rozmiar obiektu

MI
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:199
0

Cześć :)
Założmy, że mamy klasę:

Kopiuj
class A{

string txt;
public: 
A(string txt) : txt(txt){}
}

Czy obiekty mają zawsze stałą ilość zajmowanej pamięci? Jeżeli tak, to w taim razie jak jest rozwiązane takie coś:

Kopiuj
A a("BARDZO DŁUGI TEXT, STO RAZY DŁUŻSZY NIŻ TEN, A NAWET 1000 RAXY");
A b("krotki");
edytowany 1x, ostatnio: mielony
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1

Dokladnie tak samo jak to:

Kopiuj
#include <iostream>
using namespace std;

class Foo {
	char* tab;
	
public:
	Foo(size_t n): tab(new char[n]) {}
	~Foo() { delete[] tab; }
};

int main() {
	Foo f1{10};     // mala tablica
	Foo f2{100000}; // duza tablica
	cout << sizeof(f1) << " " << sizeof(f2) << endl;
	return 0;
}
MI
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:199
0

no dobrze, ale tu w klasie masz wskaźnik na pamięć char*
a ja nie mam wskaźnika.
2. Czy obiekty klas generycznych mają taki sam rozmiar?

edytowany 2x, ostatnio: mielony
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Obiekt string nie ma rozmiaru zależnego od długości łańcucha, dlatego że w uproszczeniu dana ta jest przechowywana dynamicznie (jako wskaźnik).

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

@mielony

  1. string ma taki wskaźnik w środku ;)
  2. Nie.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0

Rozmiar typu string jest stały, ale zależny od kompilatora i jego wersji:

Kopiuj
#include <string>
#include <iostream>
int main()
{
  std::cout << sizeof(std::string) << std::endl;
}

wynik (dla programów 32-bitowych):

Visual 2008 | 28
Visual 2010 | 28
Visual 2013 | 24
MinGW | 4

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.