How can I check if a pointer to actor was freed

Lets say that I have a class of fireball which holds the fireball target (actor type). 
In the tick function I am updating the fireball velocity direction to the target so if the target moves the fireball will keep track at it.
The problem is - what if the actor was already destroyed and freed by the engine?
lets say that the fireball was shot, and then the target died by another entity (whatever it is), so the destroy function has been called and the engine freed the actor. In this situation the fireball hold pointer (target) to a freed memory, and if it will try to call any of the actor functions the game will crash.
How can I check if actor was freed?

I have thought about sending an event when the actor is dead before it gets destroyed, is it the best option?

Thank you!
Quick question - with TWeakObjectPtr, is there a case which I will want to use regular C++ pointer? or should I always use TWeakObjectPtr?

You can use a TWeakObjectPtr to hold the weak actor reference in your code.

Is it specifically designed for this sort of thing:

 /***
  * 
  * FWeakObjectPtr is a weak pointer to a UObject. 
  * It can return nullptr later if the object is garbage collected.
  * It has no impact on if the object is garbage collected or not.
  * It can't be directly used across a network.
  *
  * Most often it is used when you explicitly do NOT want to prevent something from being garbage collected.
  **/

TWeakObjectPtr is designed to avoid keeping an object alive and will be aware of when it’s dead (or pending kill).

You still use a normal pointer (as a property) when you want a hard-reference that will keep an object alive… although that’s only as far as the GC system is concerned, an object can always be forcibly marked as pending kill.