есть ли новый эквивалент _malloca - PullRequest
2 голосов
/ 03 марта 2010

Я большой поклонник _malloca, но я не могу использовать его с классами. Существует ли метод динамического размещения на основе стека для классов.

Является ли это плохой идеей, еще одним проявлением c, которому следует идеологически противостоять или просто продолжать использовать ее в ограниченных целях.

Ответы [ 2 ]

5 голосов
/ 03 марта 2010

Вы можете использовать _malloca с классами, выделив память (с _malloca), а затем создав класс с помощью размещения new.

void* stackMemory = _malloca(sizeof(MyClass));
if( stackMemory ) {
   MyClass* myClass = new(stackMemory) MyClass(args);
   myClass->~MyClass();
}

Должны ли вы сделать это другое дело ...

4 голосов
/ 03 марта 2010

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

Код Джо будет работать, но имейте в виду, что деструктор никогда не вызывается автоматически, если выдается исключение, или если функция возвращается рано и т. Д., Так что это все еще рискованно. Лучше всего хранить только старые данные в любой памяти, выделенной _malloca.

Лучший способ поместить объекты C ++ в стек - это обычный способ:)

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