通过引用或指针正确传递向量

时间:2014-02-04 00:50:01

标签: c++ pass-by-reference pass-by-pointer

我尝试(基本上)为std :: vector创建一个Setter方法(它的D3D10渲染)

void GraphicsClass::BeginFrame(vector<LightClass> const &vlights)
{
    lights = vlights;

其中lights是GraphicsClass的私有成员,声明:

vector<LightClass> lights;

现在,数组的属性被复制;但元素lights[0], lights[1]等包含垃圾。我使用Visual Studio调试器检查了这个。

我显然可以使用

来解决
void GraphicsClass::BeginFrame(vector<LightClass> const &vlights) {
    int size = vlights.size();
    int i;
    lights.resize(size);
    for (i = 0; i < size; i++)
       lights[i] = vlights[i];

但我不喜欢我不理解这个主题,这段代码看起来好一点。

提前感谢您的回答!

LightClass按要求:

class LightClass
{
public:
LightClass(void);
~LightClass(void);
void SetDiffuseColor(float, float, float, float);
void SetDirection(float, float, float);

D3DXVECTOR4 GetDiffuseColor();
D3DXVECTOR3 GetDirection();

 private:
D3DXVECTOR4 m_diffuseColor;
D3DXVECTOR3 m_direction;
};

构造函数和析构函数都是空的,这是一个错误(我从只创建指针的类中复制了它。比如Type * thing。我是OOP的新手)

我可能会将矢量更改为矢量。

1 个答案:

答案 0 :(得分:2)

您需要为LightClass实施一个复制构造函数,而不仅仅是operator=(如在您的解决方法中)。