crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Возможен ли класс определяющий сам создан ли он на стеке
SABROG
  опции профиля:
сообщение 23.10.2009, 23:03
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Кстати может оффтопик, но такой вопрос сегодня назрел. А возможно ли создать класс таким образом, чтобы компилятор ругался, если экземпляр этого класса пытаются создать на стеке, а не на куче через new?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 24.10.2009, 13:40
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Мне кажется проще будет сделать сам класс так, чтобы обязать программера создавать его экземпляры на куче.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.10.2009, 14:12
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(ViGOur @ 24.10.2009, 14:40) *
Мне кажется проще будет сделать сам класс так, чтобы обязать программера создавать его экземпляры на куче.

ну да это не сложно
допустим класс А нужно обязательно создавать в куче.
делаем ему все конструкторы private и делаем ему друга ACreator который имеет статические функции Init() для каждого конструтора А создаем в инит в куче А и возвращаем указатель.

можно эти статические функции прямо в А и засунуть кстаити. но в книженции одной хвалили способ с 2 классами.

можно посмотреть классы smart-pointer`ов они на подобии делаются... может что нибудь удастся использовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zamnach
  опции профиля:
сообщение 30.3.2010, 18:22
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 18.7.2008
Пользователь №: 239

Спасибо сказали: 0 раз(а)




Репутация:   0  


+к вышесказанному: есть так называемые compile_time_assert,
описанные в книге Александреску "Как я тр@хнул ежика"
"Современное проектирование на C++"
с помощью них можно организовать ругань компилера при вызове конструктора без new.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.4.2021, 21:26