c ++ статическое распределение классов - PullRequest
1 голос
/ 12 декабря 2010

Я знаю, как предотвратить выделение класса в куче (сделать новые и новые [] закрытыми).Я знаю, как предотвратить стек и статические выделения (сделать деструктор частным).

Мне интересно, есть ли в любом случае разрешить только статические выделения во время компиляции?

Ответы [ 3 ]

2 голосов
/ 12 декабря 2010

Неа.Сожалею.Причина в том, что статическое размещение предъявляет к типу точно такие же требования, что и автоматическое распределение;его нельзя различить.

Однако вы можете запретить клиентскому коду создавать экземпляр вашего типа и предоставить доступ к одному или нескольким экземплярам, ​​созданным собственным кодом типа.

Обычно люди часто думаютчто синглтоны и т. д. - великолепная идея, возможно, она дает некоторое чувство контроля, что угодно, но в любом случае, то, что в какой-то момент требуется более общая реализация, и вся эта работа была не просто потрачена впустую, а затем активно генерировалабольше ... и совершенно бесполезно ... работать.

Поэтому общие рекомендации, как и в случае преждевременной оптимизации, не выполняются.

Хотя в некоторых случаях это может быть правильным решением.

Приветствия & hth.,

2 голосов
/ 12 декабря 2010

Почему бы просто не использовать пространство имен?Нет смысла оборачивать что-либо в классе, если у вас когда-либо будет статический экземпляр этого класса.

1 голос
/ 12 декабря 2010

Не существует способа заставить все экземпляры класса быть статичными. Не могли бы вы создать класс с исключительно статическими членами?

На мой взгляд, это лучше, чем использовать namespace, потому что пространства имен не могут иметь закрытых членов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...