alloca()用于从堆栈中分配内存,该内存在到达作用域末尾时自动释放。同时,C ++中的自动指针可确保堆栈中自动释放堆中动态分配的内存。
说自动指针提供的自动回收功能是否正确?
答案 0 :(得分:2)
不,完全没有,这完全是错的。 C ++中的智能指针(unique_ptr
,shared_ptr
以及旧的和不推荐的auto_ptr
)的目的是在自由商店中拥有内存分配,即使用new
分配的对象(虽然有一些灵活性)。特定于供应商的alloca
在调用堆栈上分配内存(而不是对象),而不是在免费存储上。
标准中最接近alloca
的模拟是C的可变长度数组,但C ++甚至没有。即使这样,语义也是不同的,因为C和C ++中的名称是作用域的,但alloca
的语义并没有系统地与范围相关联(而是与函数)相关联。如果愿意的话,可以将alloca
视为提供动态大小的局部变量",但这种类比有很多陷阱。