Pointers ganz verzichten? Haben andere Sprachen eigentlich auch so etwas?



  • lerne grad mit C++ weiter:

    Im Buch steht leider nicht über den wirklichen Sinn von Zeigern. Hab woanders gelesen, es soll das Programm beschleunigen? Stimmt das? Und wenn ja haben eigentlich andere Sprachen wie etwa PHP, VisualBasic auch solche Zeiger-Funktionen? Mir ist da nix aufgefallen... Weil ich in PHP-Buch dreiviertel davon schon durchgelesen hab... Wenn sie diese Zeigern tatsächlich nicht haben, warum dann eigentlich nicht? Nur C++?

    Kann man in C++ eigentlich auch Zeiger und Referenzen gänzlich verzichten und trotzdem jede Art von Programm zu gestalten?



  • Zeiger brauchst du z.B. um reservierten Speicher auf dem Heap korrekt verwalten zu können. Referenzen und Zeigern können außerdem ganz nützlich sein um eine optimale übergabe von Parametern zu ermöglichen.

    Beispiel:

    class Mesh
    {
      // Irgendein Vertexpuffer mit 100.000.000 Vertices
    }
    
    // ...
    
    void Renderer::RenderMesh( Mesh foo )
    {
      // usw...
    }
    

    Hier wird ein Meshobjekt kopiert. Und zwar oftmals mit der gesammten Datenlast über die es verfügt, also 100.000.000 mal n Bytes. Stell dir vor wie langsam das werden kann. Daher ist eine Übergabe als Zeiger (besser jedoch als Referenz) vorteilhaft (notwendig).

    void Renderer::RenderMesh( const Mesh& foo )
    {}
    

    Hier wird das Objekt nichtmehr kopiert sondern nur eine (konstante) Referenz auf das Objekt übergeben.

    Wenn du genauere Infos zu dem Thema haben willst würd ich mich einfach mal darüber einlesen. Gibt ja genug gute Bücher die das Thema behandeln.

    grüße



  • Man braucht Pointer vor allem für dynamische Datenstrukturen (wie Listen, Bäume oder allgemeine Assoziationen zwischen Objekten). Ich nehm an, dass es das in PHP und VB auch gibt (in VB.NET auf jeden Fall). Ansonsten hat sowas praktisch jede Sprache in der einen oder anderen Form. (Matlab leider nicht, deshalb ist es auch so schwer darin richtig zu programmieren *grrr*)
    Was man normalerweise nicht kann, ist mit Pointern rechnen, das ist eine Spezialität von C und C++, die hier (nur halb hinter den Kulissen) benutzt wird, um auf Array-Elemente zuzugreifen. Andere Sprachen haben für sowas eigenständige Sprachmittel.



  • xBlackKnightx schrieb:

    Weil ich in PHP-Buch dreiviertel davon schon durchgelesen hab... Wenn sie diese Zeigern tatsächlich nicht haben, warum dann eigentlich nicht? Nur C++?

    c++ hat im gegensatz zu vielen anderen sprachen die möglichkeit, klassenobjekte auf dem (schnellen!) stack anzulegen. will man das nicht, muß man zeiger oder referenzen benutzen. außerdem sind sie notwendig, um das call-by-value zu umgehen, wenn man das mal muß oder aus geschwindigkeitsgründen will. referenzen sind als übergabeparameter des copy-konstruktors und als rückgabe diverser operatoren notwendig.

    Kann man in C++ eigentlich auch Zeiger und Referenzen gänzlich verzichten und trotzdem jede Art von Programm zu gestalten?

    nö.



  • vielen vielen dank! jetzt verstehe ich


Log in to reply