Как в vector записать экземпляр класс и поток с++
Подскажите пожалуйста, как в vector записать экземпляр класс и поток. Я не могу понять что я делаю не так.
class myCub {};
struct Cub
{
thread CubStream;//поток
myCub CubInstance;//экземпляр
};
void cub(Cub& objCub)
{
myCub c;
objCub.CubInstance = c;
}
int main()
{
vector<Cub>cubs;
Cub objCub;
for (size_t i = 0; i < 3; i++)
{
objCub.CubStream = thread(cub,std::ref(objCub));
cubs.push_back(objCub);
}
}
Ошибка C2280 "Сube::Сube(const Сube &)": предпринята попытка ссылки на удаленную функцию list-2 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include\xmemory 696
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Первое, чтобы запустить поток, нужен первый аргумент как адрес функции : thread(cub,std::ref(objCub)).
Потоки копироваться не могут. Разрешается только перенос. По-этому при добавлении в вектор, нужен std::move.
class myCub {};
# include <thread>
using std::thread;
struct Cub
{
thread CubStream ;//поток
myCub CubInstance ;//экземпляр
};
void cub(Cub& objCub)
{
myCub c;
objCub.CubInstance = c;
}
# include <vector>
using std::vector;
# include <utility>
int main()
{
vector<Cub>cubs;
Cub objCub;
for (size_t i = 0; i < 3; i++)
{
// указываем функцию cub
objCub.CubStream = thread {cub,std::ref(objCub)};
// переносим в вектор
cubs.push_back(std::move(objCub));
}
}