Boost Smart Pointer



  • Hallo,

    ich schau mir gerade Boost an und bin gerade bei http://www.highscore.de/cpp/boost/smartpointers.html.
    Ich versuche die Aufgabe 1 auf dieser Seite zu lösen.

    Hier meine Lösung:

    #include <iostream>
    #include <cstring>
    #include <boost/scoped_array.hpp>
    
    void print(char *text)
    {
    	std::cout << text << std::endl;
    }
    
    int main(int argc, char *argv[])
    {
    	if (argc < 2)
    	{
    		std::cerr << argv[0] << " <data>" << std::endl;
    		return 1;
    	}
    
    	size_t size = std::strlen(argv[1]);
    	boost::scoped_array<char> text(new char[size+1]);
    	std::strcpy(text.get(), argv[1]);
    	print(text.get());
    }
    

    Ist diese Lösung i.O.?
    Ich möchte eigentlich raw-Pointer vermeiden, habe jedoch einen in void(print() benötigt, da ich es nicht geschafft habe das scoped_array zu übergeben.
    Und strcpy würde ich auch gerne vermeiden.

    Bin für alle Vorschläge offen auch zum generellen Stil.

    Vielen Dank im Voraus



  • Wie wär es einfach mit std::string text = argv[1]; ?



  • Oder...

    http://www.c-plusplus.net/forum/p1964314

    Unterster Beitrag...



  • Ich möchte eigentlich raw-Pointer vermeiden, habe jedoch einen in void(print() benötigt, da ich es nicht geschafft habe das scoped_array zu übergeben.

    Ich würde es mal mit einer Referenz probieren.



  • Ich glaube, ihr habt mich etwas falsch verstanden. Es ist mir bewusst, dass man das mit std::string oder std::vector einfacher machen kann. Ich wollte wie gesagt nur die Aufgabe 1 auf oben genannter Seite lösen und smart pointer benutzen. Dass das Beispiel ungünstig ist, ist mir klar.



  • void print(const boost::scoped_array<char>& text)
    {
       // ...
    }
    


  • Wenn´s um das Verständnis von smart pointer und Rohzeigern geht dann ist deine Lösung in Ordunung. Mit get() wahren die smart pointer Klassen die Kompatibilität zu Schnittstellen, die Rohzeiger erwarten.


Log in to reply