是否有一个新的_malloca等值

rer*_*run 2 c++ memory-management visual-c++

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

这是一个坏主意,c的另一个遗迹应该在意识形态上被反对,或者只是为了有限的目的继续使用它.

Joe*_*oeG 6

您可以通过分配内存(使用_malloca)然后使用placement new构建类来将_malloca与类一起使用.

void* stackMemory = _malloca(sizeof(MyClass));
if( stackMemory ) {
   MyClass* myClass = new(stackMemory) MyClass(args);
   myClass->~MyClass();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 让我们填写这个答案中的点:这是毫无意义的.编译器已经生成了这样的代码,它永远不会忘记调用析构函数.即使代码抛出异常. (2认同)

Ash*_*ain 5

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

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

将 C++ 对象放入堆栈的最佳方式是正常方式:)

MyClass my_stack_class;
Run Code Online (Sandbox Code Playgroud)