Russian Qt Forum
Ноябрь 23, 2024, 03:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Вещества] Класс на стеке, но не в куче  (Прочитано 6243 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Апрель 06, 2011, 09:15 »

Возможно ли написать класс, экземпляр которого нельзя будет создать в куче, а только на стеке?
Код
C++ (Qt)
class SomeClass {
   void* operator new (std::size_t size) throw (std::bad_alloc);
   void* operator new (std::size_t size, const std::nothrow_t& nothrow_constant) throw();
   void* operator new (std::size_t size, void* ptr) throw();
};
 
Такой класс при помощи new не создать, но есть еще всякие malloc'и.
Что скажете?
Задача - простое любопытство.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Fat-Zer
Гость
« Ответ #1 : Апрель 06, 2011, 09:32 »

ИМХО средствами с++ такого не добиться(да и какими либо другими)...
Да и приведённого способа недстаточно, ведь и экземпляр этого класса можно включить в другой и создать его в куче без проблем...
Код
C++ (Qt)
class OtherClass
{
 //...
 SomeClass sc;
};
//...
OtherClass *oc = new OtherClass;
 
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Апрель 06, 2011, 09:34 »

Включение в другой класс не считается.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Fat-Zer
Гость
« Ответ #3 : Апрель 06, 2011, 09:53 »

а насколько надо быть извращенцом, чтобы алоцировать экземпляр класса через malloc?
Да и ещё, наверное, надо перегрузить operator new[]

ЗЫ: если не секрет, для чего такое нужно?
« Последнее редактирование: Апрель 06, 2011, 09:54 от Fat-Zer » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Апрель 06, 2011, 10:02 »

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Fat-Zer
Гость
« Ответ #5 : Апрель 06, 2011, 10:16 »

тоже недавно думал... из той же оперы проблемма: есть ли способ, узнать по указателю, где память находится в статике, стеке или куче?

ЗЫ: а что означает [Вещества] в заголовке?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Апрель 06, 2011, 10:21 »

ЗЫ: а что означает [Вещества] в заголовке?
http://lurkmore.ru/%D0%92%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
brankovic
Гость
« Ответ #7 : Апрель 06, 2011, 12:43 »

а мне интересно, можно ли выделить в куче себе стек, и на него перескочить, чтобы там всё выполнялось..
Записан
Fat-Zer
Гость
« Ответ #8 : Апрель 06, 2011, 13:20 »

а мне интересно, можно ли выделить в куче себе стек, и на него перескочить, чтобы там всё выполнялось..
а если банально сделать ассемблерную вставку, которая меняет BP?
Записан
brankovic
Гость
« Ответ #9 : Апрель 06, 2011, 13:50 »

а мне интересно, можно ли выделить в куче себе стек, и на него перескочить, чтобы там всё выполнялось..
а если банально сделать ассемблерную вставку, которая меняет BP?

ну да, но что-то сломаться может. Будут ли эксепшены работать, thread-local storage, всякие такие штуки. Надо проверить, в общем
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 22.