I need it in a few cases to clean up memory. In a tall inheritance tree it's quite a common requirement, actually, especially when working with abstract base classes and multiple inheritance.
I didn't realise that I needed virtual destructors until then, though, and the realisation was not very funny. C++ has quite a few questionable decisions in its syntax, but this one tops it all. Like, I can't imagine any situation where it would be a good thing not to call the destructor of an inheriting class...

A struct knows neither access modifiers nor inheritance. If you consider those matters of "standards and readability", then you did not yet understand what object oriented programming is about

It knows them, it just defaults them to public...so I'm not sure what you're getting at.

It knows them, it just defaults them to public...so I'm not sure what you're getting at.

My apologies. I did some reading up, and it turns out that structs in C++ do in fact have both access modifiers and inheritance. That astonishes me a bit, I always thought they were mostly there as a relic from C to improve code portability, but it turns out they have been heavily extended when compared to C-structs. Well, I've learned something new, thanks for that!

No worries! Structs have become a little weird in C++, not because of complexities or anything, but because they've effectively become a different name for a class and seem to just exist for backwards compatibility.