如何在C++中传递向量作为类的引用?

How to pass a vector as a reference to class in C++?

本文关键字:引用 向量 C++      更新时间:2023-10-16

>k.push_back(12);取消注释此行将停止所有线程(不显示输出(。当我评论它时,线程开始显示输出。

#ifndef DESIGNA_H
#define DESIGNA_H
#include <thread>
#include <unistd.h>
#include <vector>
using namespace std;
class B
{
int & shared;
public:
B(int & shared) : shared(shared) {}
void run() { while(1) { usleep(100);std::cout << "nB shared: " << shared; } }
};
class A
{
int & shared;
std::vector<int> & p;
public:
A(int & shared, std::vector<int> arg) : shared(shared), p(arg) {}
void run() { while(1) { usleep(100);std::cout << "nA shared: " << p[0]; } }
};
class Thread_manager
{
std::vector<int> k;
int shared;
A objA;
B objB;
std::thread threadA;
std::thread threadB;
public:
Thread_manager()
: objA(shared, k),
objB(shared),
threadA(&A::run, &objA),
threadB(&B::run, &objB)
{
k.push_back(12);
shared = 3;
while(1)
{
std::cout << "nd";
usleep(1000);
}
}
~Thread_manager()
{
shared = 5;
threadA.join();
threadB.join();
}
};
#endif // DESIGNA_H

我已经老了

使用 A(int & shared, std::vector arg( : shared(shared(, p(arg( {},您可以将悬空指针存储在 p.
...
确切地说,这是存储对临时副本的引用。

如何将向量的引用传递给类?

让我们比较一下A中的声明

class A
{
int & shared; 

对 int 的引用

std::vector<int> & p; 

对整数向量的引用

public:
A(int & shared, std::vector<int> arg) : shared(shared), p(arg) {} 

整数的引用,整数的非参考向量

};

就像您现在所做的那样,p名称的对象在该构造函数的结尾大括号中不再存在。它是Thread_manager::k的副本

你需要arg才能成为std::vector<int> &.