一些编译器支持对 C++ 的扩展,因此可以在堆栈上动态分配内存。例如,g++
支持alloca()
以及 VLA。所有这些扩展都带有一个警告,即动态分配的内存在调用函数范围的末尾被“释放”。(编辑:为了澄清,我在'deallocated'周围使用引号,因为实际发生的是编译器正在递减/递增堆栈指针,因此为什么alloca()
需要编译器支持。)这意味着alloca()
在类的构造函数中分配的内存被释放一旦构造函数返回。
在构造函数通过一些重要步骤来确定要分配多少内存的类中,这种限制变得难以处理。类的用户必须在构造类的函数中分配内存,暴露一些可以说不应该暴露的内部结构。此外,在我的代码中加入变通办法以便能够使用alloca()
或 VLA 通常不方便。
你能想出一些方法来规避这个限制,以便我可以使用alloca()
VLA 或其他语言扩展,从而可以在类内分配内存并具有类范围吗?