Par définition, un constructeur n'est appelé qu'une seule fois, lorsque l'objet est créé. Si vous avez accès à un objet, alors il doit avoir été créé, vous n'êtes donc pas autorisé à rappeler le constructeur - c'est la raison pour laquelle les appels au constructeur explicites ne sont pas autorisés. De même, les destructeurs ne doivent être appelés qu'une seule fois, lorsque l'objet est détruit. Si cela pouvait toujours être fait automatiquement, le langage interdirait également les appels destructeurs explicites. Cependant, dans certaines circonstances, vous pouvez avoir besoin d'un contrôle précis de la gestion de la mémoire et de la possibilité de créer et de détruire explicitement des objets dans la mémoire que vous gérez. Dans ce but, le langage fournit un "placement nouveau" pour créer un objet à un emplacement arbitraire, et des appels destructeurs explicites pour détruire les objets créés de cette manière. Un appel de constructeur explicite ne serait pas utile, car vous devez être en mesure de spécifier l'emplacement du nouvel objet - donc vous obtenez plutôt le "placement new". Un appel de destructeur explicite est suffisant, il n'est donc pas nécessaire d'inventer une sorte de "placement delete" correspondant. Donc: il n'y a pas d'utilisation valide pour les appels constructeurs explicites, donc ils ne sont pas autorisés. Il existe une utilisation valide pour les appels destructeurs explicites, donc ils sont autorisés (syntaxiquement), avec la règle que vous ne devez les utiliser que sur des objets qui ne seront pas détruits autrement, c'est-à-dire des objets créés avec "placement new". cas, appelez-les exactement une fois. Les utiliser de toute autre manière, comme beaucoup d'erreurs C++, compilera mais donnera un comportement indéfini.
Vous semblez très persistant à propos de l'appel du constructeur. Si vous essayez de faire cela pour un vrai code de production, ne le faites pas. C'est moche et hack, et vous feriez mieux de faire un nouvel objet (après tout, c'est ce que vous essayez logiquement de faire). – GManNickG
Ce n'est pas le code de production GMan, sa curiosité sur les raisons pour lesquelles les choses ne sont pas autorisées de cette façon. La curiosité de savoir ce qui était dans l'esprit du programmeur qui a conçu et codé le compilateur. Afin que nous puissions mieux comprendre comment les choses fonctionnent en interne dans un compilateur. :) Mike a très bien répondu, je suppose. J'ai accepté cette réponse. –