Excptions, static/dynamic?



  • Das geht, das weiß ich 🙂 Aber wer wirft schon ein char Array...



  • Seikilos schrieb:

    Das geht, das weiß ich 🙂 Aber wer wirft schon ein char Array...

    der DeSoVoDaMu z.b. macht das. 😉
    ...oder man 'throwed' einen pointer auf irgendwas statisches (eine feste struct oder so), um die möglichkeit auszuschliessen, dass beim kopieren was schief geht (wie camper schon angedeutet hat).
    🙂



  • Apeman schrieb:

    ...oder man 'throwed' einen pointer auf irgendwas statisches (eine feste struct oder so), um die möglichkeit auszuschliessen, dass beim kopieren was schief geht (wie camper schon angedeutet hat).
    🙂

    Aber dabei bitte keine Kopierphobie entwickeln, statics haben auch genug potentielle Nachteile 😉



  • Apeman schrieb:

    Seikilos schrieb:

    Das geht, das weiß ich 🙂 Aber wer wirft schon ein char Array...

    der DeSoVoDaMu z.b. macht das. 🙂

    Ich zeige vielleicht wie es geht, aber machen tu ich das nicht 😉



  • (Ich machs auch nicht aber...) müsste das mit dem String werfen nicht gehen? Rohe Strings werden doch in der Data-Section des Programms gespeichert, der Zeiger müsste doch seinen Lebtag gültig sein..?



  • camper schrieb:

    DeSoVoDaMu schrieb:

    Und grundsaetzlich eher std::string und std::vector nutzen, die haben schon einen funktionierenden Copy-Ctor.

    Das sollte man sich an dieser Stelle allerdings genau überlegen: die Konstruktion eines Exceptionobjekts sollte nicht fehlschlagen können (und das kann bei std::string oder std::vector ohne weiteres schiefgehen), andernfalls kommen wir sehr schnell bei terminate() an.

    Jupp.
    Bei Exceptions ist entweder viel Handarbeit angesagt, oder man verwendet z.B. boost::shared_ptrstd::string o.ä.
    Ein boost::shared_ptr kann schliesslich no-throw kopiert werden... 🙂



  • Badestrand schrieb:

    (Ich machs auch nicht aber...) müsste das mit dem String werfen nicht gehen? Rohe Strings werden doch in der Data-Section des Programms gespeichert, der Zeiger müsste doch seinen Lebtag gültig sein..?

    das denke ich auch. ich kann zwar nur C, aber ich nehme an, dass in C++ stringkonstanten ebenfalls über die gesamte programmlaufzeit ihre gültigkeit behalten. was soll schlecht sein am 'throwen' eines rohen C-strings? (ausser dass es der denkweise von C++ fans zuwider ist, nach der ja alles unnötig verkompliziert werden muss).
    🙂



  • Apeman schrieb:

    ich kann zwar nur C, aber ich nehme an, dass in C++ stringkonstanten ebenfalls über die gesamte programmlaufzeit ihre gültigkeit behalten. was soll schlecht sein am 'throwen' eines rohen C-strings?

    Hat sich denn jemand dagegen ausgesprochen?

    (ausser dass es der denkweise von C++ fans zuwider ist, nach der ja alles unnötig verkompliziert werden muss).

    Dafür haben die C-Fans nach der dritten Parameterübergabe vergessen, ob der rohe C-String jetzt auf dem Heap, Stack, Datenbereich oder sonstwo lag 😃 :p



  • Ihr reisst meinen Text alle aus dem Zusammenhang 😃
    Ich habe mich fuer eine Exceptionklasse ausgesprochen.
    Der Part zu std::string und std::vector war allgemein, weil der OP ein C-Array aus einer Funktion zurueckgeben wollte. Aber: ja, ihr habt recht! 🙂



  • Apeman schrieb:

    ...ausser dass es der denkweise von C++ fans zuwider ist, nach der ja alles unnötig verkompliziert werden muss...

    Seltsamerweise kommen 80% der Anfragen/Probleme mit "Zeichenketten" hier im Zusammenhang mit NTBS und werden zu 90% durch den Einsatz von std::string gelöst.

    Außerdem wird jedesmal der Code um 70% kürzer...

    Jaja, wir C++er müssen immer alles komplizierter machen ... 😉

    Gruß,

    Simon2.


Anmelden zum Antworten