| |
1-56 Abbildende C++-Sprache, v1.1 Juni 2003 1 // C++ struct S {... }; typedef S SA[5 ]; typedef S SA_slice; Kategorie SA_forany {... }; Sa s; //... initialisieren s... Irgendein a; a < < = s; // Linie 1 a < < = SA_forany(s); // Linie 2 Zeichnen Sie Resultate 1 in der Anforderung des noncopying operator<<=(Any&, des S *) passend zum Zerfall des SA kleiden Sie Art in einen Zeiger zu seinem ersten Element, anstatt Anforderung des kopieren SA_forany Einfügungoperator. Konstruieren der Linie 2 ausdrücklich das SA_forany schreiben Sie und ergibt folglich den gewünschten Einfügungoperator, der hervorgerufen wird. Die noncopying Version von operator<< = für Gegenstand nimmt Hinweise die Adresse von das T_ptr Art. // IDL Schnittstelle T {... }; // C++ leeres operator<<=(Any&, T_ptr); // kopierend leeres operator<<=(Any&, T_ptr *); // nicht-kopierend Die noncopying Gegenstandbezugseinfügung verbraucht den Gegenstandhinweis, der auf vorbei gezeigt wird T_ptr * ; folglich, nachdem Einfügung der Anrufer möglicherweise nicht den Gegenstand zugänglich machen kann, der vorbei bezieht T_ptr seit irgendwelche kann die Vorlage kopiert haben und dann sofort freigegeben haben wenden Sie Hinweis ein. Der Anrufer behält Besitz der Ablage für das T_ptr bei selbst. Die noncopying Version von operator<< = für valuetypesnehmen die Adresse des T * Zeigerart. // IDL valuetype T {... }; // C++ leeres operator<<=(Any&, T *); // kopierend leeres operator<<=(Any&, t-**); // nicht-kopierend Die noncopying valuetypeeinfügung verbraucht das valuetype, das auf durch den Zeiger gezeigt wird dieses t-** Punkte zu. Nach Einfügung kann der Anrufer möglicherweise nicht den valuetypefall zugänglich machen auf durch den Zeiger dieses T gezeigt * Punkte zu. Der Anrufer behält Besitz von bei Ablage für spitz-zu T * selbst. Im allgemeinen die kopierenversionen von operator<< = werden auch auf gestützt Any_var Art. Merken Sie, daß wegen der Umwandlungsoperatoren, die umwandeln Any_var zu Any& für das Parameterüberschreiten nur die operator<< = Funktionen definiert als Mitglied Funktionen von irgendwelchen Notwendigkeit, für Any_var ausdrücklich definiert zu werden . |  |
|
| |
|
|