被叫方分配被叫方释放
callee allocates callee frees
在"C 和C++中的安全编码"一书中,作者提到了跨项目的三种不同方法来管理字符串。
- 调用者
分配,调用者释放(C99,OpenBSD,C11 Annex K)
被叫方分配,来电方释放 (ISO/IEC TR 24731-2)
被叫方分配,被叫方释放 (C++
std::basic_string
)
然后他提到,"第三种内存管理模式,即被调用方分配和释放存储,是三种解决方案中最安全的,但仅在C++可用。
为什么第三种模式最安全?
首先,第三种方法仅在C++中可用的说法是无稽之谈。
这三种方法在 C 和 C++ 中都是可能的。
关于"安全"部分,这取决于你在做什么。如果您正在编写一个自包含的字符串类(例如。 std::basic_string
),第三种方法可能是最好的,因为类完全自我管理自己的记忆。
依赖于主部分(或任何其他外部部分)中的内存分配/删除的字符串类是使用字符串时忘记必要分配的邀请。(=错误的可能性很高)
相关文章:
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- C++双重释放或损坏(out)
- 如何在c++中释放内存
- 使用全局声明的向量时,C++双重释放错误/损坏
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 如何在向量中释放指针?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 对等方断开连接后未释放 SSL 内存
- C++释放传递给函数中参数的内存,或者将其留给调用方
- 释放调用方或被调用方的内存
- 创建资源并将其返回给调用方释放的最佳接口