C++ construction script behaves completely differently to BP construction script

Yes sometimes BP handles stuff for you, in this case the bp construction script is handling the instances array you have inside your component, but c++ does not, so everytime you are executing the construction script you are adding a new instance without cleaning the old instances that were there before. All you need to do in your c++ code is clear the instance yourself, or keep track about how many you have.

Cheers