Handles are signed ints, so in theory you should have about four billion handles per type definition before you start getting undefined results.
Out of curiosity I ran a little test on my own rig, creating type instances, grabbing their handle and then deleting them. It ran as expected through the 2 billion mark, then switched over to -2bil (obviously using an unsigned int internally) and counted upwards from there. Once it hit positive numbers it just kept going, so it's just an incrementing operator with 4 billion possible values.
On the plus side, that means you can do that as often as you like, and so long as you don't have four billion actual type instances running simultaneously (HIGHLY unlikely) you should be fine.
On the down side, if for some reason you've kept the first instance around when that happens (as a prototype, say), it may be overwritten (I say 'may' because I didn't actually keep the first instance around to test this for certain, but I think it's likely).
Out of curiosity I ran a little test on my own rig, creating type instances, grabbing their handle and then deleting them. It ran as expected through the 2 billion mark, then switched over to -2bil (obviously using an unsigned int internally) and counted upwards from there. Once it hit positive numbers it just kept going, so it's just an incrementing operator with 4 billion possible values.
On the plus side, that means you can do that as often as you like, and so long as you don't have four billion actual type instances running simultaneously (HIGHLY unlikely) you should be fine.
On the down side, if for some reason you've kept the first instance around when that happens (as a prototype, say), it may be overwritten (I say 'may' because I didn't actually keep the first instance around to test this for certain, but I think it's likely).