被调用者分配,被调用者释放。

3
在书籍《C和C++安全编码》中,作者提到了在项目中管理字符串的三种不同方式。
  1. 调用者分配、调用者释放(C99、OpenBSD、C11 Annex K)

  2. 被调用者分配、调用者释放(ISO/IEC TR 24731-2)

  3. 被调用者分配、被调用者释放(C++ std::basic_string

然后他提到,“第三种内存管理模式,即被调用者既分配又释放存储空间,是这三种解决方案中最安全的,但只在C++中可用。
为什么第三种模式最安全?

"caller"和"callee"如何与"整个项目"相关联? - Kerrek SB
这听起来像是一种过于简单化的描述,而且不是一个好建议。 - R.. GitHub STOP HELPING ICE
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - R.. GitHub STOP HELPING ICE
1个回答

4
首先,声称第三种方法仅适用于C ++是无稽之谈。所有三种方法都可以在C和C ++中使用。
关于“安全”部分,这取决于你正在做什么。如果你正在编写一个自包含的字符串类(例如std :: basic_string),第三种方法可能是最好的,因为该类完全自我管理其内存。
依赖于主要内存分配/删除的字符串类(或任何其他外部部分)会导致在使用字符串时忘记必要的分配。(=高概率出现错误)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接