我会尽量避免使用指针。让我们从你的向量开始。为什么它需要vector<Material*>
而不是vector<Material>
?除非Material
是继承类,否则您可以使用Material
对象向量而不是指针。这样,您就不需要必须vector<Material*>
迭代和销毁它们中的每一个的类的析构函数(通过使用shared_ptr
,您也可以避免这种情况)。
现在,正如评论中提到的,问题在于Material
使用ambiance
和diffuse
成员的指针。也没有理由。从技术上讲,您希望它是Vector3
或者Vector4
当您正在编写渲染器或材质系统时,但让我们继续吧float[2]
。
C++11 (0x) 具有很酷的移动语义,您可以使用它来避免创建临时对象(因为我们要将对象推送到向量中并且没有移动语义,因此会在这样做时创建一个临时对象)
因此,您的代码如下所示:
class Material {
int id;
float ambiance[2]; // you really ought to use Vector2 instead. pointers are evil.
float diffuse[2];
Material (const int _id, const float _amb[], const float _dif[]) : id(_id) {
ambiance[0] = _amb[0]; ambiance[1] = _amb[1]; // actual copy is made
diffuse[0] = _dif[0]; diffuse[1] = _dif[1];
}
}
-----
vector<Material> materials;
while(input_read_from_the_file !=NULL){
int id = someval1;
float x[2]= {someval2,someval3};
float y[2]= {someval4,someval5};
materials.emplace_back(Material(id,x,y)); // or even materials.emplace_back(id, x, y);
}