Verschiedene Fragen eines Java Umsteigers...



  • Hallo zusammen!
    Ich hab mehrere Verständnissfragen zu C++. Ich komme eigendlich von Java. (Kein Flaming bitte 🙄) Fangen wir mal an:

    1: Dokumentation á la Java?
    Ich hab hier im Forum einige Posts gelesen und öfter kommt dann mal eine Antwort wie "std:something". Für sowas allerdings immer andere Menschen "belästigen" zu müssen gefällt mir gar nicht. Gibt es eine Übersicht der "Von Haus aus"-Funktionen so wie es Java hat?

    2: Stack, Heap... WTF?
    WAS genau das alles ist hab ich (glaube ich) mittlerweile verstanden. Nur die Anwendung überhaupt nicht. Muss ich (sollte ich) jedes Objekt per new auf dem Heap erzeugen, damit es auch nach dem Methodenaufruf noch vorhanden ist? Ein

    SomeObjekt aObjekt;
    

    erzeugt zwar das Objekt, doch es ist nur solange gültig bis die Funktion beendet wurde. Wenn ich nun in der Funktion Referenzen oder Pointer aus der Funktion an andere Klassen gegeben habe dürften diese ja ungültig werden. Dann hab ich mir gedacht, dass ich per new kein Problem haben sollte. Tja, nur wer kümmert sich dann um das delete'en des Objektes wenn es nicht gebraucht wird? Klar, es gibt unter C++ von Haus aus keinen GarbageCollector. Meine nächste Idee waren dann Kopierkonsturktoren, doch irgendwie ist das ziemlicher Mist bei so vielen Konstruktor und Destruktoraufrufen. Daher meine Frage: Wie macht man es richtig?

    Arrays als Methodenparamter?
    Eigendlich eine simple Frage: warum motzt mein gcc über:

    void NeKlasse::neMethode( anotherClass[][] classArray ){
    //Hier nicht relevanter Code
    }
    

    ? Wie übergebe ich Arrays als Funktionsparamer?

    So, ich denke das sind erstmal alle Fragen die ich momentan hab.
    Vielen Dank schonmal!

    -Der Javamensch

    PS: Warum ist "v o r r a u s" ein Bad-Word?



  • voraus wird mit einem r geschrieben und bei arrayuebergabe darf nur die erste arraydimension (die linkeste) unbestimmt sein.



  • voraus, voraus, voraus, voraus, voraus, voraus, voraus, voraus, voraus, voraus... So, nun sollte ich es verstanden haben und nie wieder falschschreiben. 🙄
    Das mit den Arrays (wer hätte es gedacht) funktioniert nach deiner Beschreibung nun. Danke dafür 🙂



  • @1: schau dir z.B. mal die Übersicht unter www.cppreference.com an, das ist schon relativ vollständig.

    @2: delete'n sollte ein Objekt immer derjenige, der es besitzt. Das heißt, wenn dir eine andere Funktion einen Pointer auf einen Heap-Bereich gegeben hat, mußt du diesen mit delete wieder freigeben (oder den Pointer an jemanden weiterreichen, der das macht).

    (deshalb werden new/delete Aufrufe häufig in die Konstruktoren/Destruktoren von Stack-Objekten eingebaut)



  • In C++ ist es auch eher üblich std::vector oder ähnliches statt blanke Arrays zu benutzen.



  • Spitze! Alle meine Fragen zufriedenstellend beantwortet 🙂 Danke nocheinmal. Sollte noch mal eine Frage aufkommen werd ich mich wohl mal registrieren 😉 www.cppreference.com ist GENAU das was ich suchte 🙂

    -Javamensch



  • Sowas wie nie GarbageCollector gibt's in C++ auch. Allerdings nicht standard mäßig dabei (nur std::auto_ptr aber den kann man nicht richtig kopieren). Schau dir mal die boost Klassen boost::scoped_ptr, boost::shared_ptr, boost::scoped_array und boost::shared_array. Die machen eigentlich genau das was du brauchst. Die Boost Libraray für C++ gibt's unter http://boost.org

    mfg.


Anmelden zum Antworten