Frage

Ich habe also an PIMPL und Stack-Zuteilung nachgedacht.Ich habe eine Bibliothek geschrieben und entschied, PIMPL zu verwenden, um das private Mitglied der Klasse auszublenden.Das heißt, ich hätte eine Klasse, die so erklärt hätte

generasacodicetagpre.

Es ist ziemlich unkompliziert.Aber dann im Konstruktor tun Sie das

generasacodicetagpre.

Wenn jemand, wenn jemand, der meine Bibliothek verwendet, einen Foo auf dem Stapel erzeugt, machen sie im Wesentlichen eine Heap-Zuordnung.Ist das der Kompromiss, mit dem Sie mit Pimpl verwenden müssen?Ich dachte daran, die Dokumentation mit einer Warnung neben den Konstruktoren zu veröffentlichen: "WARNUNG: Dies führt zu einer Haufenallokation" oder SomeNuch.

Mein anderer Gedanken bestand darin, alle Klassen zu haben, die der Implementierung als reine virtuelle Schnittstellen und ein ganzer Bündel statischer Fabrikmethoden ausgesetzt sind, die intelligente Zeiger zurückgeben.Dies bedeutet auch HEAP-Zuteilung, aber es gibt keinen Trick dazu.

irgendwelche Gedanken oder Vorschläge?Bin ich übermäßig über die Programmierer, die meine Bibliothek verwenden?

War es hilfreich?

Lösung

Ist das der Kompromiss, mit dem Sie mit PIMPL verwenden müssen?

effektiv, ja, obwohl es Techniken gibt, wie beispielsweise die von Herb Sutter diskutierten Techniken in " Schnelles Pimpl-IDIOM, ", mit dem die HEAD-Zuteilung auf die Kosten einer größeren Komplexität beseitigt oder beschleunigt werden kann.

Ich dachte daran, die Dokumentation mit einer Warnung neben den Konstruktoren zu veröffentlichen: "WARNUNG: Dies führt zu einer Heap-Zuteilung" oder SomeNuch.

nur, wenn es notwendig ist (d. H. Nur wenn Ihre Benutzer von der Tatsache überrascht sein würden, dass Ihre Klasse Heap-Zuteilung durchgeführt hat). Viele Klassen führen eine Heap-Zuteilung aus, darunter viele derjenigen in der C ++ - Standardbibliothek (zum Beispiel alle Container).

Bin ich übermäßig über die Programmierer mit meiner Bibliothek senkt?

möglicherweise :-). Es sei denn, Sie haben hohe Leistungsanforderungen für Ihre Klasse, oder Sie erwarten, dass Instanzen Ihrer Klasse erstellt und extrem häufig zerstört werden, würde ich mir nicht zu viel Sorgen machen. Wenn Sie erhebliche Leistungsanforderungen erhebliche Leistungsanforderungen haben, ist PIMPL möglicherweise keine gute Wahl.

Andere Tipps

Wenn jemand, wenn jemand, der meine Bibliothek verwendet, einen Foo auf dem Stapel erzeugt, machen sie im Wesentlichen eine Heap-Zuordnung. Ist das der Kompromiss, mit dem Sie mit Pimpl verwenden müssen?

yep.

Ich dachte daran, die Dokumentation mit einer Warnung neben den Konstruktoren zu veröffentlichen: "WARNUNG: Dies führt zu einer Heap-Zuteilung" oder SomeNuch.

Ich würde das überlegen, dass über aggressive Kommentare :) Wenn Ihre Klasse so leistungskritisch ist, sollten Sie vielleicht den PIMP-Idiom vermeiden. Wenn Sie eine Nummer darstellen, ist dies möglicherweise bezüglich und sich erwähnenswert. Wenn Sie die Implementierung einer Datenbankverbindung verbinden, lohnt sich nicht den Kommentar :)

Mein anderer Gedanken bestand darin, alle Klassen zu haben, die der Implementierung als reine virtuelle Schnittstellen und ein ganzer Bündel statischer Fabrikmethoden ausgesetzt sind, die intelligente Zeiger zurückgeben. Dies bedeutet auch HEAP-Zuteilung, aber es gibt keinen Trick dazu.

yeah, es ist für den Benutzer etwas offensichtlicher, aber es lohnt sich nicht, sich nicht mehr wert zu haben.

irgendwelche Gedanken oder Vorschläge? Bin ich übermäßig über die Programmierer, die meine Bibliothek verwenden?

Es gibt einen Kompromiss, aber wenn Ihre Klasse komplex genug ist, um wirklich vom PIMP-Idiom zu gewinnen, können Sie wahrscheinlich angenommen werden, dass eine Haufenallokation in Ordnung ist. Wenn ich Ihre Bibliothek benutzte, würde es mich wahrscheinlich nicht umsetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top