0

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

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

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

4

1 回答 1

2

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

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

还,

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

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

于 2013-09-04T02:49:24.113 回答