c++ - API 内存 : Heap or Stack? (C++)

标签 c++ api memory-management libraries

<分区>

上下文:我正在制作一个简单的库。在其中,我将返回我创建的一个类,我可以 a) 在堆栈上声明并期望用户在需要时将其复制到堆中,或者 b) 声明堆并期望用户在使用完对象后删除该对象。

这些方法中哪一个是最佳实践,如果没有明显的赢家,应该在哪里使用?我想我会创建一个 .dll(.so 等),但如果我创建不同类型的二进制文件,答案会改变吗?如果用户将标题和源代码复制到他们的项目中并在每次构建项目时构建整个库,将会发生什么情况。会发生什么变化?

旁注:我想第三种选择是允许参数表示函数返回的对象是否在堆栈上。不过,这看起来确实令人费解,而且我从未见过库/API 这样做过。第四种选择是允许指向一个已经存在的对象的指针,然后用新数据填充该对象。这种方式允许用户指定他们喜欢哪种类型的对象,但它又一次显得相当复杂。

最佳答案

总是喜欢自动内存管理。只有在需要动态生命周期时才使用动态内存管理。如果你的函数的目的是返回一个 T,那么这里就不需要动态生命周期。

如果您确实需要动态生命周期,那么永远不要处理指向您需要删除的对象的原始指针 - 始终使用智能指针。

此外,

expect the user to copy to the heap if it needs to be on the heap

你的意思是移动到堆中,对吧?

关于c++ - API 内存 : Heap or Stack? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604381/

相关文章:

c++ - 在不终止程序的情况下将动态分配的内存返回给操作系统

c++ - Linux强制应用程序在特定显示器上全屏显示

c++ - 为什么当我打开很多文件时出现 "open file failed"?

api - 下载 PMC 和 PubMed 数据库中的所有全文文章

javascript - Facebook 视频播放器 API

c++ - 如何在 C++ 的全局字符数组中动态分配类的实例?

c++ - 模板类和重载 '=='

c++ - 尝试用纯c语言对arduino进行编程,在 '='之前出现以下错误: expected ',' , ';'、 'asm'、 '__attribute__'或 'Print' |

javascript - 如何只向具有 'Liked' 我的网站的访问者显示内容

iphone - 在 Instruments 中进行分析时 main.m 中的内存泄漏?