Sollte eine Bibliothek eine Schnittstelle verwenden, die intelligente Zeiger verwendet?

9

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.

  1. Sollte die Schnittstelle intelligente Zeiger verwenden? (Macht die Bibliotheksbenutzer möglicherweise auch gezwungen, intelligente Zeiger zu verwenden?)
  2. Wäre es unordentlich, wenn die Schnittstelle rohe Zeiger verwendet, aber die Bibliothek interne Smartpointer verwendet? (Ist es überhaupt möglich? Shared_ptr hat keine release () -Methode ...)
  3. Können zwei C ++ 0x-kompatible intelligente Zeigerbibliotheken (zB Boost und VS2010) synonym verwendet werden? (Sagen wir, ich benutze VS2010, um meine Bibliothek zu schreiben und die Benutzer boost)

Bitte helfen Sie:)

    
user418680 28.08.2010, 04:52
quelle

4 Antworten

5

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.

  1. Ja.
  2. Ja. Tu es nicht.
  3. Es ist wahrscheinlich keine gute Idee, sie zu mischen (obwohl ich es noch nie versucht habe).
    Aber das kannst du kompensieren:
    Da die meisten Open-Source-Quellen als Quelle vertrieben werden, können Sie Ihre Quelle so erstellen, dass sie für die Verwendung in vielen Umgebungen konfiguriert werden kann.

Zum Beispiel:

%Vor%

Ich bin mir sicher, dass es andere Möglichkeiten gibt, dies zu tun.
Aber es ist spät.

    
Martin York 28.08.2010, 05:23
quelle
0
  1. Hängt davon ab, ob Sie # 2 oder # 3 für wichtiger halten.
  2. Ja.
  3. Nein, es sei denn, sie wurden absichtlich so gestaltet.
dan04 28.08.2010 04:58
quelle
0

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.

    
Chubsdad 28.08.2010 05:05
quelle
0

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).

    
n1ckp 28.08.2010 16:51
quelle

Tags und Links