API内存:堆还是堆栈?(C++)

API Memory: Heap or Stack? (C++)

本文关键字:C++ 堆栈 内存 API      更新时间:2023-10-16

上下文:我正在制作一个简单的库。在它中,我返回我创建的一个类,我可以:a)在堆栈上声明,如果需要在堆上,则期望用户复制到堆,或者,b)在堆上声明,并期望用户在处理完对象后delete

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

附带说明:我想第三个选项是允许一个参数来表示函数返回的对象是否在堆栈上。不过,这看起来真的很复杂,而且我从未见过库/API这样做。第四种选择是允许指针指向已经存在的对象,然后用新数据填充该对象。这种方式允许用户指定他们想要哪种类型的对象,但同样,这似乎相当复杂。

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

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

此外,

如果需要在堆上,则期望用户复制到堆

你是说移到堆里,对吧?