CString Aufklärung



  • ich würde mal gerne wissen was bei der zuweisung passiert:

    CString s1;
    CString s2;
    
    s2="hallo";
    
    s1 = s2;
    

    wird hier nur der Pointer an s1 gegeben oder wird s2 in s1 kopiert (ich glaub hab ich irgendwo gelesen)

    und was passiert hier:

    CString s1;
    char* s2;
    wchar_t s3[20];
    
    s2 = new char[20];
    s2 = "test2";
    
    s3="test3";
    
    s1 = s2;
    s1 = s3;
    
    delete[] s2;
    

    gleiche Frage wie oben Pointer übergabe oder Copy?

    Und was passiert in diesem falle:

    //deklaration:
    void useString(CString s1);
    
    useString(s3);
    

    wird nun in der funktion s3 in s1 kopiert oder nur die Pointer übergeben?
    freigabe s1 am ende der Funktion?

    useString("Hallo"); // Konstante angelegt in s1?
    

    und wie verhält sich das ganze mit CString als Rückgabewerten in Funktionen

    //deklaration:
    CString GetString();
    
    CString GetString()
    {
      CString s1;
    
      s1="Hallo"
      return s1; 
    }
    
    CString s2;
    s2 = GetString();
    

    geht sowas? und was passiert intern (also wird bevor s1 aufgelöst wird s1 in s2 kopiert?)

    Was will mir die MSDN damit sagen:

    This assignment (=) operator reinitializes an existing CString object with new data. If the destination string — that is, the left side — is already large enough to store the new data, no new memory allocation is performed. Be aware that memory exceptions may occur whenever you use the assignment operator because new storage is often allocated to hold the resulting CString object.



  • CString ist kein standard C++ --> falsches Forum



  • dann muss ichs wohl ins MFC kopieren ...

    PS: das ist aber dann kein crossposting mehr



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • CString verhält sich so wie es sein soll. Wenn du einem CString-Objekt einen normalen char-Pointer zuweist kann er gar nicht anders als die eigentliche Zeichenkette zu kopieren.

    Das bei der Zuweisung zwischen zwei CStrings der Pointer zugewiesen wird ist eine interne Optimierung, die nur dann zuverlässig funktionieren kann, wenn garantiert ist, dass die CStrings den von ihnen benötigten Speicher verwalten (anlegen/löschen).



  • hier geht's weiter.


Anmelden zum Antworten