Announcement

Collapse
No announcement yet.

Initialisierung von std::string

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Initialisierung von std::string

    Hi,

    ich suche ja immer noch nach der Ursache der Segmentation faults (siehe dazu auch meine ältere Frage) und bin bei einem ähnlichen Problem auf einen nicht initialisierten std::string gestoßen, der als Übergabepuffer an eine andere Funktion übergeben wurde. Daher wollte ich mal nachfragen, ob es Speicherverwaltungsmäßig einen Unterschied macht, wie man strings initialisiert.

    [highlight=cpp]
    std::string initialisiert("");
    std::string beiDeklarationZugewiesen="";
    std::string spaeterZugewiesen;
    std::string durchFunktionInitialisiert;

    spaeterZugewiesen="";

    FillString(durchFunktionInitialisiert);

    ..

    void FillString(std::string &stringPuffer)
    {
    stringPuffer="";
    }
    [/highlight]

    Muss ich jeden string wie die erste Variante initialisieren, um zu vermeiden, dass der "Müll" der in der nicht initialisierten Variable steht, bei einer Zuweisung als Verweis auf vorherigen Inhalt interpretiert und freigegeben wird, egal wo er hinzeigt? Bisher scheint nämlich in dem ganzen Projekt nur darauf geachtet worden zu sein, nicht von uninitialisierten Variablen zu lesen. Und ist es unter diesem Gesichtspunkt relevant, ob ein member einer Klasse im header des Konstruktors mit memberString("") initialisiert wird, oder innerhalb des Konstruktors mit memberString=""; ?

    Ähnliche Überlegungen gelten auch für stringstreams, und andere std:: Komponenten (list und vector wurden von mir zwar regelmäßig gecleared, bevor sie verwendet werden, aber für meinen Vorgänger kann ich da nicht die Hand ins Feuer halten).

    Gruß
    Martin

  • #2
    Ich würde da keinen Unterschied sehen
    Christian

    Comment

    Working...
    X