Правильно передавая вектор по ссылке или указателю

Я пытаюсь (в основном) сделать метод Setter для std :: vector (его рендеринг 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)

Я, вероятно, изменит вектор на вектор, хотя.

0

Решение

Вам необходимо реализовать конструктор копирования для LightClass, не просто operator= (как в вашем обходном пути).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]