![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
SABROG |
![]()
Сообщение
#1
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Кстати может оффтопик, но такой вопрос сегодня назрел. А возможно ли создать класс таким образом, чтобы компилятор ругался, если экземпляр этого класса пытаются создать на стеке, а не на куче через new?
|
|
|
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Мне кажется проще будет сделать сам класс так, чтобы обязать программера создавать его экземпляры на куче.
|
|
|
kwisp |
![]()
Сообщение
#3
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Мне кажется проще будет сделать сам класс так, чтобы обязать программера создавать его экземпляры на куче. ну да это не сложно допустим класс А нужно обязательно создавать в куче. делаем ему все конструкторы private и делаем ему друга ACreator который имеет статические функции Init() для каждого конструтора А создаем в инит в куче А и возвращаем указатель. можно эти статические функции прямо в А и засунуть кстаити. но в книженции одной хвалили способ с 2 классами. можно посмотреть классы smart-pointer`ов они на подобии делаются... может что нибудь удастся использовать. |
|
|
zamnach |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 18.7.2008 Пользователь №: 239 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
+к вышесказанному: есть так называемые compile_time_assert,
описанные в книге Александреску "Современное проектирование на C++" с помощью них можно организовать ругань компилера при вызове конструктора без new. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 3:18 |