Doppelte Vererbung von enable_shared_from_this

8

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:

  • ist es sicher, zweimal von enable_shared_from_this<> zu erben, oder wird es zwei getrennte Referenzzählungen erstellen (schlecht!)
  • Wenn nicht sicher, wie löse ich das?

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?

    
Offirmo 21.03.2013, 14:03
quelle

2 Antworten

11

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

%Vor%

Dies ist nicht Teil der Standardimplementierung, wahrscheinlich wegen des Overheads der virtuellen Vererbung.

    
ecatmur 21.03.2013, 14:27
quelle
1

Ja, Ihre Klasse wird von zwei unterschiedlichen Klassen enable_shared_from_this<A> und enable_shared_from_this<B> abgeleitet und hat zwei verschiedene schwache Referenzen

Trick aus dieser Antwort erlaubt wegen der virtuellen Vererbung

eine Basisklasse zu haben     
kassak 21.03.2013 14:20
quelle

Tags und Links