Ich habe ein Objekt (Z), das von zwei anderen Objekten (A und B) abgeleitet ist.
A und B stammen beide aus enable_shared_from_this<>
bzw. enable_shared_from_this<A>
und enable_shared_from_this<B>
.
Natürlich rufe ich shared_from_this()
auf Z auf. Und natürlich meldet der Compiler dies als mehrdeutig.
Meine Fragen sind:
enable_shared_from_this<>
zu erben, oder wird es zwei getrennte Referenzzählungen erstellen (schlecht!) Hinweis:
Ich habe diese andere Frage gefunden bad weak pointer, wenn base und derived class beide von boost :: enable_shared_from_this erben, aber nicht wirklich antworten. Soll ich auch den virtual
Trick verwenden?
Ja, gemäß schlecht schwacher Zeiger, wenn sowohl die Basis als auch die abgeleitete Klasse von boost :: enable_shared_from_this erben. Die Lösung besteht darin, die virtuelle Vererbung zu verwenden. Hier ist eine Implementierung für den C ++ 11 Standard shared_ptr
(nicht Boost):
Dies ist nicht Teil der Standardimplementierung, wahrscheinlich wegen des Overheads der virtuellen Vererbung.
Tags und Links c++ shared-ptr