Ich habe eine Klassenhierarchie, in der ich weiß, dass eine gegebene Klasse (B) immer in eine zweite (D) abgeleitet wird. Ist es in Bs Konstruktor sicher, den Zeiger this
statisch in ein D * zu werfen, wenn ich sicher bin, dass niemand jemals versuchen wird, es zu benutzen, bevor die gesamte Konstruktion fertig ist? In meinem Fall möchte ich eine Referenz auf das Objekt an eine andere Klasse (A) weitergeben.Ist dies während des Baus sicher?
struct A
{
D & d_;
A(D & d) : d_(d) {}
};
struct D; //forward declaration
struct B
{
A a;
B() : a(std::static_cast<D&>(*this)) {}
};
struct D : public B
{};
Ist dieser Code sicher?
Dies wirft die Frage auf, welche Wertklasse D hinzugefügt wird, wenn B * immer * ein D ist. – JohnMcG
B ist eine Klassenvorlage, die basierend auf ihrem Vorlagenparameter eine Elementfunktion definiert oder nicht. Es gibt mehrere Klassenvorlagen wie diese, die dann von D geerbt werden, um eine von den Vorlagenparametern abhängige Schnittstelle bereitzustellen. –