alloca() 可以替代 C++ 中的自动指针吗?
Posted
技术标签:
【中文标题】alloca() 可以替代 C++ 中的自动指针吗?【英文标题】:Can alloca () be replacement for auto pointers in C++? 【发布时间】:2014-07-03 12:56:29 【问题描述】:alloca () 用于从堆栈分配内存,堆栈在到达作用域末尾时自动释放。同时,C++ 中的自动指针确保在堆栈缠绕期间自动释放堆中动态分配的内存。
说 alloca() 提供了与自动指针提供的类似的自动回收功能是否正确?
【问题讨论】:
你的前提是错误的。alloca
分配的内存在周围的函数结束时被释放。
alloca
不可移植,它既不是 C、POSIX 也不是任何其他标准的一部分,它依赖于编译器。应避免使用它。当然,即使在函数结束时“自动”地未分配内存,它也不会(就像malloc
)在分配/释放时调用任何构造函数或析构函数。
【参考方案1】:
不,一点也不,那是完全错误的。 C++ 中智能指针(unique_ptr
、shared_ptr
和旧的和已弃用的auto_ptr
)的目的是在空闲存储上拥有内存分配,即用new
分配的对象(尽管有一些灵活性)。供应商特定的alloca
在调用堆栈上分配内存(不是对象),而不是在空闲存储上。
标准中与alloca
最接近的类似物是C 的可变长度数组,但C++ 甚至没有。即使这样,语义也不同,因为 C 和 C++ 中的名称是有作用域的,但 alloca
的语义并没有系统地与作用域相关联(而是与 函数 相关联)。如果您愿意,可以将alloca
视为提供“动态大小的局部变量”,但这种类比存在许多缺陷。
【讨论】:
以上是关于alloca() 可以替代 C++ 中的自动指针吗?的主要内容,如果未能解决你的问题,请参考以下文章