rozmiar obiektu

0

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

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ś:

A a("BARDZO DŁUGI TEXT, STO RAZY DŁUŻSZY NIŻ TEN, A NAWET 1000 RAXY");
A b("krotki");
1

Dokladnie tak samo jak to:

#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;
}
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?

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).

1

@mielony

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

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

#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

1 użytkowników online, w tym zalogowanych: 0, gości: 1