Jak rozwiązać „czystą metodę wirtualną zwaną”
Rozumiem, dlaczego tak się dzieje, ale utknąłem przy próbie rozwiązania ... oto co robi mój kod, gdy błąd jest generowany (co prowadzi do awarii), gdy mój program kończy działanie ...
pure virtual method called
SomeClass::~SomeClass()
{
BaseClassObject->SomePureVirtualMethod(this);
}
void DerivedClass::SomePureVirtualMethod(SomeClass* obj)
{
//Do stuff to remove obj from a collection
}
Nigdy nie dzwonię donew SomeClass
ale mamQList<SomeClass*>
które dołączamSomeClass*
sprzeciwia się. Cel tego destruktora wSomeClass
to powiedziećDerivedClass
aby usunąć określone wystąpienieSomeClass
z jego kolekcjiQList<SomeClass*>
.
Więc w konkretnym przykładzie ...
BaseClass
= Shape
DerivedClass
= Triangle
SomeClass
= ShapeProperties
który jest właścicielem odniesienia doShape
Więc nigdy nie dzwonię donew ShapeProperties
ale mamQList<ShapeProperties*>
wnętrzeTriangle
. Destruktor wShapeProperties
to powiedziećTriangle
aby usunąć określoną właściwośćShapeProperties
z jego kolekcjiQList<ShapeProperties*>
.