J'ai une classe C++ pour laquelle je ne veux plus jamais être instancié sur la pile. Je suis en utilisant une api pour accéder au contenu qui a été développé dans un autre (interprété) de la langue qui vient avec sa propre collecte des ordures. Les mécanismes de cette langue en savons assez pour laisser tout contenu qu'il trouve des références à sur la pile seuls, et, depuis ce natif classe contient une telle référence, il est d'une importance vitale pour le bon comportement, l'utilisateur de la maternelle à la classe C++ il ne jamais essayer de les attribuer à une instance de n'importe où ailleurs.
Remarque, je ne veux pas seulement d'interdire l'instance de ma classe allouée à nouvelles (si c'était tout ce que j'avais à faire, je pouvais à la surcharge de la classe new
de l'opérateur et de le rendre privé, ou explicitement le supprimer depuis C++11), mais aussi d'interdire toute statique ou global possible des instances de la classe ainsi. Le seul moyen valable pour instancier cette classe en toute sécurité devrait être mis sur la pile, et je voudrais en quelque sorte les garants. Autant que je sache, rendant new
privé ou de le supprimer également ne pas empêcher une autre classe d'être déclarée avec ma classe comme une variable de membre et d'une instance de l'être alloué sur le tas.
Comment je gère en ce moment est d'avoir le mot "Local" comme partie du nom de la classe comme un rappel amical de la part de l'utilisateur que l'instance est uniquement destiné à être utilisé sur la pile, mais bien sûr, ce n'est pas réellement appliqué par le compilateur ou de tout autre mécanisme, et je préfère une solution qui est plus exécutoire.
Idéalement, je veux m'assurer que ce au moment de la compilation et de l'échec de la compilation si elle est utilisée de manière incorrecte. Si ce n'est tout simplement pas possible, en levant une exception lors de l'exécution lorsque l'instance est construit est encore acceptable pour une solution de repli. Des Solutions qui fonctionnent dans C++11 et C++14 sont beaux.
Veuillez noter que cette question n'est certainement PAS la même chose que ce , qui ne voulait empêcher allocaton avec new