Передать массив структур из одного класса в другой
От: .alex Ниоткуда  
Дата: 30.11.20 08:41
Оценка: :)
Добрый день. Подскажите как правильно сделать?
Мне нужно заполнять несколько массивов в одном классе и передать их в другой (там в отдельном потоке их обрабатывать, а потом удалять). Я по старинке делал так (очень примеренный псевдокод):
#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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.