Was sind die vor-und Nachteile des d-Zeiger?
d-Zeiger Massiv in Qt, Sie sind eine Implementierung des pimpl-idiom. Ich kenne vor-und Nachteile der pimpl-idiom. Aber ich habe verpasst, die Vorteile des d-Zeiger-Implementierung. Hier und hier sind die Proben von d-Zeigern.
Ist es nicht einfacher, nur verwenden Sie diese?
class MyClassPrivate;
class MyClass {
//interface methods
private:
MyClassPrivate *pimpl_;
};
- Gibt es eigentlich irgendwelche Unterschiede zwischen "nur pimpl" und d-Zeiger? Außer für die Berufung auf Makros automatisieren den job.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Satz von Makros für die d-Zeiger-Muster bietet eine Art Bequemlichkeit und Konsistenzen. Zum Beispiel, Q_DECLARE_PRIVATE sorgt dafür, dass die pimpl private Klasse Foo wird mit FooPrivate, dass FooPrivate freundet sich mit Foo und erstellt ein nettes inline-Funktion (beide const und nonconst Versionen) genannt d_func(). Letzteres wird dazu verwendet, in Q_D makro, das schafft im Grunde ein scoped/lokale variable d, die Punkte auf die private Instanz der Klasse.
Kurz gesagt, Sie müssen nicht verwenden Q_DECLARE_PRIVATE und andere Makros, aber dadurch wird der code kürzer, übersichtlicher und konsistenter.
d-Zeiger sind eine Implementierung, unter vielen, von dem pimpl pattern. Es ist auch einer der frühen Implementierungen: "Der name 'd-Zeiger" stammt von Trolltech ' s Arnt Gulbrandsen, wer zuerst wurde die Technik in Qt, so dass es eines der ersten C++ - GUI-Bibliotheken zu pflegen Binär-Kompatibilität auch zwischen größeren release." Quelle
Ein Vorteil von Makros ist die Möglichkeit, ändern einige details der Implementierung der Implementierung des Musters an einer zentralen Stelle zur compile-Zeit. Sie könnten zum Beispiel gestalten Sie Ihre Makros verlassen Sie die Möglichkeit, auf den fast-pimpl-Implementierung zu einem späteren Zeitpunkt ohne änderung Tonnen von code (hoffentlich werden Sie nicht brauchen, wenn Sie mit pimpl :-)). Sofern du keine Fehler gemacht hast in deinem makro design/Implementierung...
Allerdings würde ich persönlich empfehlen die Vermeidung von Makros für Ihre pimpl-Implementierung, wie Sie sind kryptisch für jeden Neuling, um deinen source-tree. Makros erstellen Magische Dialekten, sind oft fehleranfällig und nicht so aussagekräftig wie die original-source-code. Sie kommen auch mit alle Probleme im Zusammenhang mit der C Pre-Prozessor; es ist nichts von der zugrunde liegenden Sprache.
Persönlich ich mag zu verwenden, nenne ich eine d-Referenz. Statt einen Zeiger, der auf Sie verweisen und Sie nicht haben, um d-Referenz. 😎 Es sieht wie folgt aus:
Ich denke, dass die d-Zeiger sind wirklich nur ein paar praktische Makros für die Umsetzung der pimpl idiom. Werfen Sie einen Blick auf die definition all dieser Makros:
Q_D
,Q_Q
,Q_DECLARE_PRIVATE
usw. Sie sind nur Abkürzungen für die Teile der pimpl. Zum Beispiel die meisten der Zeit, die Sie wollen zu halten, der Verweis auf die original-Klasse in der eigenen Klasse. Es gibtQ_Q
undQ_DECLARE_PUBLIC
für diese. Nachdem alle, mit den Makros zwingt das team, um eine einheitliche Umsetzung von pimpl. Ansonsten einige Leute nennen würde, die privaten Zeigerd
, anderepimpl_
vorstellen, dieses Chaos.