你能安全地对堆栈分配的变量调用Delete吗?
在 C 编程领域,理解内存的细微差别至关重要与在堆栈或堆上分配变量相关。虽然应该考虑编程风格和设计,但必须解决一个基本问题:是否允许对堆栈上分配的变量调用删除?
检查问题
考虑以下代码片段:
int nAmount; delete &nAmount;
class sample { public: sample(); ~sample() { delete &nAmount; } int nAmount; };
安全问题
问题的答案是否定的。对堆栈分配的变量调用delete是不安全的,应该避免。
内存分配原则
要理解原因,掌握内存分配原则很重要。对于每一个:
非法混合
严格禁止混合这些分配方法。尝试释放或删除 [] 分配有 new 的对象将导致未定义的行为。对于堆栈分配的变量调用delete也是如此。
删除的后果
当对堆栈分配的变量调用delete时,编译器可能会执行优化,例如省略,假设对象超出范围后不再使用。但是,对此类变量显式调用删除可能会导致:
结论
为了保持内存完整性并避免未定义的行为,尊重内存至关重要分配原则。避免对堆栈分配的变量调用删除,并遵守适当的分配和释放对:malloc/free、new/delete 和 new[]/delete[]。
以上是在 C 中对堆栈分配的变量调用'delete”是否安全?的详细内容。更多信息请关注PHP中文网其他相关文章!