How does Blueprints extending C++ classes actually work?

Looking for what is actually included in the Blueprint and how the linkage between the base C++ class is handled. Done a little Google-ing but can’t seem to find much information about it.

I ask because I have created my own C++ classes, extended it with Blueprint for use, everything is good until one day I modified the C++ class and Editor crashes whenever I press play (crash report suggest something on UObject creation), recreating a Blueprint that extend the class solves the problem. I believe better understanding of the things under the shell will help me and possibly others to better adjust workflow and class design so as to avoid the same issue again, saving time and effort.