alloca()可以替换C ++中的自动指针吗?

时间:2014-05-15 07:43:59

标签: c++ stack dynamic-memory-allocation

alloca()用于从堆栈中分配内存,该内存在到达作用域末尾时自动释放。同时,C ++中的自动指针可确保堆栈中自动释放堆中动态分配的内存。

说自动指针提供的自动回收功能是否正确?

1 个答案:

答案 0 :(得分:2)

不,完全没有,这完全是错的。 C ++中的智能指针(unique_ptrshared_ptr以及旧的和不推荐的auto_ptr)的目的是在自由商店中拥有内存分配,即使用new分配的对象(虽然有一些灵活性)。特定于供应商的alloca在调用堆栈上分配内存(而不是对象),而不是在免费存储上。

标准中最接近alloca的模拟是C的可变长度数组,但C ++甚至没有。即使这样,语义也是不同的,因为C和C ++中的名称是作用域的,但alloca的语义并没有系统地与范围相关联(而是与函数)相关联。如果愿意的话,可以将alloca视为提供动态大小的局部变量",但这种类比有很多陷阱。