struct mit strings, spätere zuweisung schlägt fehl (Speicherproblem)
-
ok, ich hab folgendes:
struct MyStruct { int i; std::string s; }dann
MyStruct MS; MS.i = 5; MS.s = "hello";jetzt wird's kritisch:
MyStruct* pMS = new MyStruct; pMS = MS;woher soll er in der letzten Zeile wissen, wie groß der Speicherbereich ist? Der string ist ja dynamisch......
Grüße
P
-
struct mit strings, spätere zuweisung schlägt fehl (Speicherproblem)
Die schlägt nicht fehl. Die kompiliert nicht!
SimonEdit:
Abgesehen davon:woher soll er in der letzten Zeile wissen, wie groß der Speicherbereich ist? Der string ist ja dynamisch......
Der std::string weiss wie gross er ist. Und der impl. Copy Ctor und Assignment Op.
-
*pMS = MS;
-
Jupp, da hat 'n * gefehlt

Aber wie ist's jetzt mit dem Speicher? Kann der Compiler zur Laufzeit den Speicher erweitern, wenn das Struct mehr Platz braucht als mit "new" allokiert?
P
-
ANGs_Pino schrieb:
Aber wie ist's jetzt mit dem Speicher? Kann der Compiler zur Laufzeit den Speicher erweitern, wenn das Struct mehr Platz braucht als mit "new" allokiert?
Ja. Der vom Compiler automatisch generierte Zuweisungsoperator von MyStruct ruft seinerseits den Zuweisungsoperator von std::string auf. Und der kümmert sich um den Rest.
-
ANGs_Pino schrieb:
Kann der Compiler zur Laufzeit den Speicher erweitern, wenn das Struct mehr Platz braucht als mit "new" allokiert?
Der Compiler braucht da nichts zu erweitern, da das struct immer gleich viel Platz braucht, nämlich sizeof(int) + sizeof(std::string) + ggf. ein paar bytes padding. sizeof(string) ist eine Konstante - der dynamisch allokierte Speicher für die Zeichen wird intern vom string selber verwaltet und gehört nicht mit zum struct.