【发布时间】:2011-02-11 05:27:08
【问题描述】:
我正在寻求通过编写示例软件渲染器来提高我的 C++ 技能。它获取由 3d 空间中的点组成的对象,并将它们映射到 2d 视口,并为视图中的每个点绘制不同大小的圆圈。哪个更好:
class World{
vector<ObjectBaseClass> object_list;
public:
void generate(){
object_list.clear();
object_list.push_back(DerivedClass1());
object_list.push_back(DerivedClass2());
或者...
class World{
vector<ObjectBaseClass*> object_list;
public:
void generate(){
object_list.clear();
object_list.push_back(new DerivedClass1());
object_list.push_back(new DerivedClass2());
??在第二个示例中使用指针创建新对象会破坏使用向量的点,因为向量在第一个示例中自动调用 DerivedClass 析构函数,但在第二个示例中没有?使用向量时是否需要指向新对象的指针,因为只要您使用它们的访问方法,它们就会自行处理内存管理?现在假设我在世界上有另一种方法:
void drawfrom(Viewport& view){
for (unsigned int i=0;i<object_list.size();++i){
object_list.at(i).draw(view);
}
}
当调用它时,它将为世界列表中的每个对象运行 draw 方法。假设我希望派生类能够拥有自己的 draw() 版本。那么列表是否需要指针才能使用方法选择器(->)?
【问题讨论】:
-
thnx 已编辑以免分散注意力