C++ C++;结合多态性和堆栈分配使用RAII
我一直在研究RAII(),有很多问题C++ C++;结合多态性和堆栈分配使用RAII,c++,polymorphism,raii,C++,Polymorphism,Raii,我一直在研究RAII(),有很多问题 初始化堆栈上的对象有一些强有力的参数。有没有在堆上分配内存的好方案 这是如何处理多态对象的?例如,您有一个名为Biome的抽象基类,您需要一个biomes容器。此容器需要存储海洋、苔原、沙漠等对象。是否存在任何问题或强烈反对在堆栈上分配这些对象,然后将指向这些对象的指针存储在指向Biome的指针容器中我知道一旦封装对象超出范围,这些对象将被销毁,它们的指针将被寻址到可能不存在的内存。 初始化堆栈上的对象有一些强有力的参数。有没有在堆上分配内存的好方案 当对象
Biome
的抽象基类,您需要一个biomes容器。此容器需要存储海洋
、苔原
、沙漠
等对象。是否存在任何问题或强烈反对在堆栈上分配这些对象,然后将指向这些对象的指针存储在指向Biome的指针容器中我知道一旦封装对象超出范围,这些对象将被销毁,它们的指针将被寻址到可能不存在的内存。delete this
第二个程序逻辑:容器管理其生存期,在这种情况下,容器将对其析构函数中的每个元素调用delete:
for (auto element : m_elements) {
delete element;
}
(使用C++11语法)
第三个程序逻辑:对象由各种不同的组件所拥有,而不仅仅是容器,并且只有当最后一个组件死亡时,对象才会死亡。在这种情况下,您可能会发现std::shared_ptr
(或boost::shared_ptr
在C++11之前的版本中)非常有用
关键是:这些场景都与RAII无关,真的,因为在每一个场景中,生命周期都与范围不符。就你而言,这个问题太宽泛了。你应该对
生物群落
,海洋
,苔原
,沙漠
的关系有所了解。您遇到的最可能的问题是在某种程度上,另一个是正确的内存管理(如果可能的话,我建议)。很抱歉我不得不关闭投票…Ocean
,Tundra
和Desert
extendBiome
。这是关系的延伸。