operator char * überladen



  • Ich wollte gerade bei einer meiner klassen den operator char* überladen, hab aber das Problem das ich nicht weis wie/wo ich das char Array deklarieren/allokieren soll. Wenn ich das Array direkt in der Methode deklariere bekomm ich bei der rückgabe die Warnung: "Adresse einer lokalen Variablen oder eines temporaeren Wertes wird zurueckgegeben", und wenn ich es mit new anlege müsste ich es auserhalb der methode wieder löschen was ich nicht gerade für besonders sauber halte. Hat jemand ne idee wie man das am besten macht?



  • Garnicht überladen und eine Methode zur verfügung stellen die const char* auf einen Member zurückgibt.
    (Siehe std::string.c_str())



  • Um was für eine Klasse handelt es sich denn?



  • Hi,

    wenn du einen pure std::string zurückgeben willst, geht das nicht.

    Entweder du überlädst operator std::string(void), arbeitest mit Smart Pointern (evtl. mit Reference Counting) oder erstellst eine RAII-Klasse, die einen char* kapselt.

    ChrisM



  • Is ne Klasse für Ip's die man halt einfach in Strings umwandeln können soll. Die Klasse CString (MFC) hat doch auch so eine Methode (operator LPCSTR, was auch nur char * ist), wie ist das denn da gemacht?



  • Hi,

    da wird einfach ein Zeiger auf den Speicherbereich zurückgegeben, der ja eh schon da ist. Genauso wie bei std::string.

    ChrisM



  • Bei std::string kann es aber auch ein Zeiger auf einen temporären Speicher sein der verfallen kann wenn Änderungen gemacht werden.
    Schlimmer noch: Es könnte ein Speicherbereich sein der mit Referenzcounting Arbeitet. Da einfach was zu ändern wäre Fatal. Man liest also i.d.r. einfach nur.

    CString sieht für direckts Schreiben extra Methoden vor, aber nichts hindert Dich daran den CString falsch zu verwenden. (Kann ja versehenltich passieren).
    Wenn der operator char* nicht existiert kann auch nicht versehentlich was falsches passieren. Du zwingst den Anwender sich gedanken zu machen.


Anmelden zum Antworten