BeginDestroy() doesn’t get called either, because the Garbage collector doesn’t go through reference cycles.
I use WeakPointers on both UObjects and AActors, as stated in my question. If you want to see an example from Epic, you can search for TWeakObjectPtr in Strategy Game Example. I do similar things in my code.