过去,每当我需要创建一个类的实例时,我都会使用 new 在堆上分配它(除了 stl 类,以及像 vec3 和 mat4 这样的数学类)。
然而,我只是在批判性地查看我的一些代码,并意识到从技术上讲,我可以只是在堆栈上创建这些类。它们不是很大,不需要在当前范围之外进行修改等。当我(偶尔)需要将它们传递给另一个函数时,我可以像传递指针一样轻松地使用引用。
过去我总是默认在堆上分配,并且只在某些情况下使用堆栈,但是现在我想知道默认在堆栈上分配是否会更好,并且只在以下情况下使用堆
- 确实需要一个指针(即对象的生命周期要超过声明的范围)
- 类或数组对于堆栈来说太大了
- 继承需要它(抽象基类/接口)
- 别的东西?
这也提出了一个问题:一个类有多大(大约)太大而无法在堆栈上合理分配?(假设我们至少正在开发智能手机,并升级到高端台式机)我是否只是不必要地担心堆栈大小限制?(可能,只要我们不是在谈论大型数组,并且没有类会接近一千字节)