我是_malloca的忠实粉丝,但我不能在课堂上使用它。是否有基于堆栈的类动态分配方法。
这是一个坏主意,是否应该在意识形态上反对或继续将其用于有限目的的另一个c残余。
答案 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;