Ich fange an, eine Bibliothek zu schreiben und über ihre Schnittstelle nachzudenken. Frühere Bibliotheken, die ich geschrieben habe, verwenden rohe Zeiger (sowohl intern als auch in ihrer Schnittstelle), und jetzt möchte ich die mit VS2010 gelieferte intelligente Zeigerbibliothek ausprobieren.
Bitte helfen Sie:)
Es ist nicht möglich, diese Frage zu beantworten, ohne viel mehr über Ihre Designprinzipien und die Art, wie Sie die Verwendung der Bibliothek erwarten, zu verstehen.
Ich kann also nur aufgrund meiner Erfahrung und der Art, wie ich meine Bibliotheken benutze, antworten.
Zum Beispiel:
%Vor% Ich bin mir sicher, dass es andere Möglichkeiten gibt, dies zu tun.
Aber es ist spät.
Ich würde sagen, hier 80-20 Regel zu verwenden. Wenn 80% der Clients boost / stl / C ++ - kompatibel wären, dann tun Sie dies bitte. Im Übrigen können Sie eine Adapterschicht erstellen und die Komplexität auf diese Ebene verschieben. Das Adapterdesignmuster ist mein Favorit für solche Zwecke.
Aus der Sicht eines Benutzers würde ich sagen, dass Sie in Ihrer Oberfläche einfach klarstellen müssen, was Sie brauchen.
Benötigen Sie eine Kopie des Objekts oder nur einen Zeiger?
Intern können Sie wahrscheinlich den Typ des Zeigers verwenden, der Ihnen am besten gefällt, solange er die Leistung nicht zu sehr beeinträchtigt und keine Fehler verursacht.
Es stellt sich die Frage, was genau Sie mit diesem Zeiger tun werden. Werden Sie es löschen? Kann ich die Referenz ändern, wenn ich das Objekt aktualisiere / lösche (zB im Fall einer GUI-Bibliothek).
Da jemand, der normalerweise keine intelligenten Zeiger verwendet, wenn er nicht benötigt wird, zu viele intelligente Zeiger sieht, sagt mir einfach, dass Sie nicht darauf achten, was Sie tun werden und Ursache für mögliche Fehler ist.
Als Bibliotheksbenutzer bevorzuge ich einen Absturz (beim Versuch, einen eindeutig ungültigen Zeiger zu dereferenzieren), um einen halbgültigen Zeiger herum zu haben, der nicht wirklich das ist, was ich erwarte (was vermutlich ein Problem bei der Verwendung von intelligenten Zeigern der shared_ptr Art).
Tags und Links c++ smart-pointers