我一直在研究 RAII ( http://tomdalling.com/blog/software-design/resource-acquisition-is-initialisation-raii-explained/ ) 并且有很多问题!
在堆栈上初始化对象有一些强有力的论据。有没有在堆上分配内存的好方案?
这如何处理多态对象?例如,您有一个名为 Biome
的抽象基类,您需要一个生物群系容器。此容器需要存储Ocean
、Tundra
、Desert
等对象。是否存在任何问题或反对在堆栈上分配这些对象的有力论据,但是然后将指向这些对象的指针存储在指向生物群系的指针容器中? 我知道一旦封装对象超出范围,这些对象将被销毁,它们的指针将指向可能不存在的内存。
There are some strong arguments for initializing objects on the stack. Is there ever a good scenario to allocate memory on the heap?
当对象的数量或它们的实际类型仅在运行时(而非编译时)或较大时才知道时,您当然需要在堆中分配对象。你不想拥有大 call stack frames (一个典型的帧应该小于 1 千字节,因为整个堆栈小于 2 兆字节,并且您可以具有递归函数,或者只是非常深的函数)。
How does this work with polymorphic objects? For example, you have an abstract base class called Biome and you need a container of biomes. This container needs to store objects of Ocean, Tundra, Desert etc.
您的容器实际上将存储指向这些对象的指针。当然,您可能希望拥有智能指针。