Virtuelle Funktion aus Ctor
-
Abend,
ich habe mal gelesen, dass man aus Ctor keine virtuellen Methoden aufrufen soll.
Nun habe ich folgende Situation:class ResourceOwner { virtual void onResourceCreated(Resource* r) = 0; }; class Resource { Resource(ResourceOwner* owner) : o(owner) { o->onResourceCreated(this); } ResourceOwner* o; };Jede Resource hat einen ResourceOwner und wenn eine Resource erzeugt wird, benachrichtigt diese sofort den ResourceOwner. ResourceOwner::onResourceCreated() ist allerdings virtual. Ist das dennoch ok oder problematisch?
-
Du sollst keine virtuellen Funktionen der Klasse aufrufen, die gerade konstruiert wird! Der Rest ist vollkommen egal.
-
Ja natürlich. Es ist ja eine virtuelle Methode von ResourceOwner. Allerdings muss man bei der Übergabe eines this Zeigers im Ctor immer daran denken, dass evtl. das Objekt noch nicht vollständig initialisiert ist. Wenn der Zeiger aber einfach nur gespeichert wird, ist das kein Problem.