rer*_*run 2 c++ memory-management visual-c++
我是_malloca的忠实粉丝,但我不能在课堂上使用它.是否有基于堆栈的类动态分配方法.
这是一个坏主意,c的另一个遗迹应该在意识形态上被反对,或者只是为了有限的目的继续使用它.
您可以通过分配内存(使用_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)
你是否应该这样做是另一回事......
您应该尽可能避免使用 _malloca,因为如果您分配太多内存,可能会导致堆栈溢出 - 如果您正在分配可变数量的内存,这尤其是一个问题。
Joe 的代码可以工作,但请注意,在抛出异常或函数提前返回等情况下,不会自动调用析构函数,因此它仍然存在风险。最好只在 _malloca 分配的任何内存中保留普通的旧数据。
将 C++ 对象放入堆栈的最佳方式是正常方式:)
MyClass my_stack_class;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1643 次 |
最近记录: |