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];
?
-
-
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.