Tôi hiểu tại sao điều này xảy ra, nhưng tôi đang cố gắng giải quyết nó ... đây là những gì mã của tôi đang thực hiện khi lỗi được tạo ra (do đó dẫn đến sự cố) khi chương trình của tôi ra khỏi ...Cách giải quyết "phương pháp ảo thuần túy được gọi là"
pure virtual method called
SomeClass::~SomeClass()
{
BaseClassObject->SomePureVirtualMethod(this);
}
void DerivedClass::SomePureVirtualMethod(SomeClass* obj)
{
//Do stuff to remove obj from a collection
}
tôi chưa bao giờ có một cuộc gọi đến new SomeClass
nhưng tôi có một QList<SomeClass*>
mà tôi thêm SomeClass*
đối tượng. Mục đích của destructor này trong SomeClass
là để nói DerivedClass
để loại bỏ một trường hợp cụ thể của SomeClass
từ bộ sưu tập của nó là QList<SomeClass*>
.
Vì vậy, trong một ví dụ cụ thể ...
BaseClass
= Shape
DerivedClass
= Triangle
SomeClass
= ShapeProperties
công ty sở hữu một tham chiếu đến Shape
Vì vậy, tôi không bao giờ có một hãy gọi tới số new ShapeProperties
nhưng tôi có một QList<ShapeProperties*>
bên trong của Triangle
. Các destructor trong ShapeProperties
là để nói Triangle
để loại bỏ một tài sản cụ thể của ShapeProperties
từ bộ sưu tập của nó là QList<ShapeProperties*>
.
Sau đó, làm thế nào để tôi biết được trường hợp nào của 'this' tôi đang đề cập đến nếu tôi gọi nó bằng trong hàm khởi tạo có nguồn gốc? – user869525
@ user869525: Bạn có thể thử lặp lại điều đó không? Tôi không hiểu ... –
Tôi có thể hiểu lầm điều này, "Nếu' SomePureVirtualMethod' cần phải được gọi tại destructor, thì bạn sẽ phải gọi nó bên trong destructor của lớp nơi định nghĩa thực sự của phương thức bạn muốn. " – user869525