API内存:堆还是堆栈?(C++)
API Memory: Heap or Stack? (C++)
上下文:我正在制作一个简单的库。在它中,我返回我创建的一个类,我可以:a)在堆栈上声明,如果需要在堆上,则期望用户复制到堆,或者,b)在堆上声明,并期望用户在处理完对象后delete
以下哪种方法是最佳实践,如果没有明确的赢家,应该在哪里使用我想我会创建一个.dll
(.so
等),但如果我创建不同类型的二进制文件,答案会改变吗?如果用户每次构建项目时都将头和源复制到项目中并构建整个库,会发生什么情况。会发生什么变化?
附带说明:我想第三个选项是允许一个参数来表示函数返回的对象是否在堆栈上。不过,这看起来真的很复杂,而且我从未见过库/API这样做。第四种选择是允许指针指向已经存在的对象,然后用新数据填充该对象。这种方式允许用户指定他们想要哪种类型的对象,但同样,这似乎相当复杂。
总是喜欢自动内存管理。只有在需要动态生存期时才使用动态内存管理。如果函数的目的是返回一个T,那么这里不需要动态生存期。
如果您确实需要动态生存期,那么永远不要处理指向需要删除的对象的原始指针——始终使用智能指针。
此外,
如果需要在堆上,则期望用户复制到堆
你是说把移到堆里,对吧?
相关文章:
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 堆栈中大小变量输入错误 (C++)
- 堆栈问题(平衡表达式问题集)
- C++ 在堆栈中包含多态属性的类对象存储
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 在 C++ 中使用链表进行堆栈
- 变量周围的堆栈'...'已损坏
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- C++线程的可用堆栈大小