是否有一个新的_malloca等值

时间:2010-03-03 16:51:06

标签: c++ visual-c++ memory-management

我是_malloca的忠实粉丝,但我不能在课堂上使用它。是否有基于堆栈的类动态分配方法。

这是一个坏主意,是否应该在意识形态上反对或继续将其用于有限目的的另一个c残余。

2 个答案:

答案 0 :(得分:5)

您可以通过分配内存(使用_malloca)然后使用placement new构建类来对类使用_malloca。

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

你是否应该这样做是另一回事......

答案 1 :(得分:4)

你可能应该尽可能避免使用_malloca,因为如果你分配了太多的内存,你可能会导致堆栈溢出 - 如果你分配了可变数量的内存,尤其是一个问题。

Joe的代码可以工作,但请注意,在抛出异常的情况下,或者如果函数提前返回等,则永远不会自动调用析构函数,因此它仍然存在风险。最好只保留_malloca分配的任何内存中的普通旧数据。

将C ++对象放在堆栈上的最佳方法是正常的方法:)

MyClass my_stack_class;