Russian Qt Forum

Разное => Говорилка => Тема начата: Пантер от Апрель 06, 2011, 09:15



Название: [Вещества] Класс на стеке, но не в куче
Отправлено: Пантер от Апрель 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'и.
Что скажете?
Задача - простое любопытство.


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: Fat-Zer от Апрель 06, 2011, 09:32
ИМХО средствами с++ такого не добиться(да и какими либо другими)...
Да и приведённого способа недстаточно, ведь и экземпляр этого класса можно включить в другой и создать его в куче без проблем...
Код
C++ (Qt)
class OtherClass
{
 //...
 SomeClass sc;
};
//...
OtherClass *oc = new OtherClass;
 


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: Пантер от Апрель 06, 2011, 09:34
Включение в другой класс не считается.


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: Fat-Zer от Апрель 06, 2011, 09:53
а насколько надо быть извращенцом, чтобы алоцировать экземпляр класса через malloc?
Да и ещё, наверное, надо перегрузить operator new[]

ЗЫ: если не секрет, для чего такое нужно?


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: Пантер от Апрель 06, 2011, 10:02
Да не нужно это. Просто вчера после тяжелого рабочего дня в затуманенном мозгу возник такой вот вопрос. :)


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: Fat-Zer от Апрель 06, 2011, 10:16
тоже недавно думал... из той же оперы проблемма: есть ли способ, узнать по указателю, где память находится в статике, стеке или куче?

ЗЫ: а что означает [Вещества] в заголовке?


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: Пантер от Апрель 06, 2011, 10:21
ЗЫ: а что означает [Вещества] в заголовке?
http://lurkmore.ru/%D0%92%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0 (http://lurkmore.ru/%D0%92%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0)


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: brankovic от Апрель 06, 2011, 12:43
а мне интересно, можно ли выделить в куче себе стек, и на него перескочить, чтобы там всё выполнялось..


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: Fat-Zer от Апрель 06, 2011, 13:20
а мне интересно, можно ли выделить в куче себе стек, и на него перескочить, чтобы там всё выполнялось..
а если банально сделать ассемблерную вставку, которая меняет BP?


Название: Re: [Вещества] Класс на стеке, но не в куче
Отправлено: brankovic от Апрель 06, 2011, 13:50
а мне интересно, можно ли выделить в куче себе стек, и на него перескочить, чтобы там всё выполнялось..
а если банально сделать ассемблерную вставку, которая меняет BP?

ну да, но что-то сломаться может. Будут ли эксепшены работать, thread-local storage, всякие такие штуки. Надо проверить, в общем