如何在C++中传递向量作为类的引用?
How to pass a vector as a reference to class in C++?
>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> &
.
相关文章:
- 创建引用向量的优雅方式
- C++重新引用向量中的值
- 取消引用向量时出现问题
- 从类返回引用向量
- 引用向量中的特定索引
- 如何取消引用向量迭代器
- 对唯一 ptr 无效读取的引用向量
- 在引用向量时使用访问器进行迭代C++
- 对模板函数的引用向量
- 必须调用对非静态成员函数的引用(向量)
- 常量引用向量向量<向量<long>>赋值不编译
- 结构中的按引用向量
- C++的新手,程序在取消引用向量的一部分时没有响应
- C++:试图通过引用向量来理解传递
- C++ 按引用向量
- c++ 函数,将数据返回到引用向量
- 调用"new"以存储到shared_ptr的引用向量中
- C++逗号运算符重载和引用向量
- 构造函数中的引用向量:未初始化的引用
- 在c++中自动引用向量