У меня есть класс С++, для которого я только хочу, чтобы он был создан в стеке. Я использую api для доступа к контенту, который был разработан на другом (интерпретированном) языке, который поставляется с собственной сборкой мусора. Механизмы на этом языке знают достаточно, чтобы оставить какой-либо контент, на который он ссылается только на стек, и поскольку этот родной класс содержит такую ссылку, жизненно важно, чтобы для правильного поведения пользователь собственного класса С++ никогда не пытайтесь выделить экземпляр этого в другом месте.
Обратите внимание: я не только хочу запретить экземпляр моего класса выделяться новым (если это все, что мне нужно было сделать, я мог бы перегрузить оператор класса new
и сделать его закрытым или явно удалить его с тех пор С++ 11), но также запретить любые статические или возможные глобальные экземпляры класса. Единственный действительный способ безопасного создания этого класса должен быть в стеке, и я хотел бы как-то это гарантировать. Насколько я знаю, создание new
private или удаление его также не препятствует объявлению другого класса с моим классом в качестве переменной-члена и экземпляром, который выделяется в куче.
Как я сейчас управляю этим, это иметь слово "Локальный" как часть имени класса как дружественное напоминание пользователю о том, что экземпляр предназначен только для использования в стеке, но, разумеется, это на самом деле не выполняется компилятором или каким-либо другим механизмом, и я предпочел бы более эффективное решение.
В идеале я хочу обеспечить это во время компиляции и сбоя при неправильном использовании. Если это просто невозможно, бросание исключения во время выполнения, когда экземпляр сконструирован, остается приемлемым отступлением. Решения, которые работают на С++ 11 или С++ 14, прекрасны.
Обратите внимание, что этот вопрос определенно НЕ совпадает с этим, который только хотел предотвратить allocaton с new