Добрый день. Подскажите как правильно сделать?
Мне нужно заполнять несколько массивов в одном классе и передать их в другой (там в отдельном потоке их обрабатывать, а потом удалять). Я по старинке делал так (очень примеренный псевдокод):
#include <iostream>
struct Aaa
{
char sz[32];
int a;
};
class cl2
{
public:
void Foo2(uint8_t* ptr, int nCnt)
{
Aaa* pCurAaa = (Aaa*)ptr;
for (int i = 0; i < nCnt; i++)
{
std::cout << pCurAaa->sz << "\t" << pCurAaa->a << std::endl;
pCurAaa++;
}
std::cout << std::endl;
// освобождаем память
delete[] ptr;
}
};
cl2 c2;
class cl1
{
public:
uint8_t *m_pAaa;
void Foo1()
{
// несколько раз заполняем
for (int i = 0; i < 5; i++)
{
int nCnt = 10 + i;
int nSize = sizeof(Aaa) * nCnt;
m_pAaa = new uint8_t[nSize];
memset(m_pAaa, 0, nSize);
Aaa* pCurAaa = (Aaa*)m_pAaa;
for (int j = 0; j < nCnt; j++)
{
strcpy_s(pCurAaa->sz, "text");
pCurAaa->a = j;
pCurAaa++; // shift to the next item
}
// передаём в другой класс
c2.Foo2(m_pAaa, nCnt);
m_pAaa = NULL; // всё, тут "забываем" про этот кусок памяти, с ним работает и потом удаляет касс2
}
}
};
void main()
{
cl1 c1;
c1.Foo1();
}
Так вот, вроде как нужно использовать std::vector(), чтобы например не тащить за собой размер передаваемого массива ну и вроде как безопаснее, так?
Если да, то как переписать подобное на использование std::vector()...
PS. И еще один вопрос, а как мне добавить в мою структуру Aaa переменную с типом std::string?
ЗЫЫ. в реальном коде uint8_t *m_pAaa; в классе1 тоже нужна, т.е. с ней работают методы класса1 пока не передали в класс2