【发布时间】:2015-05-01 15:21:22
【问题描述】:
这是我的两个课程:
class App {
public:
void run(){
std::vector < std::thread > th_list;
for(std::vector < Host * > ::iterator it = host_list.begin(); it != host_list.end(); it++){
th_list.push_back(std::thread(&App::th_getInfo, *this, *it, readFile(holder["cmdFile"])));
}
for(std::vector<std::thread>::iterator it = th_list.begin(); it != th_list.end(); it++){
it->join();
}
}
private:
void th_getInfo(Host * pc, std::string info){
std::string result;
if(pc->query(info, &result)){
holder.Push(pc->getIp(), result);
}
}
std::vector < Host * > host_list;
Holder holder;
};
class Holder {
public:
void Push(std::string ip, std::string data){
_m.lock();
std::pair <std::string, std::string> tmp(ip, data);
q.push(tmp);
std::cout << q.size() << std::endl;
_m.unlock();
}
inline std::string &operator[] (std::string j){ return config[j]; }
private:
std::map <std::string, std::string> config;
std::mutex _m;
std::queue < std::pair < std::string, std::string> > q;
}
所以,我的问题是每次调用函数 Holder::Push q.size() 在开始时等于 0,在函数结束时等于 1。推送的对象消失了,但我不调用 q.pop()。
【问题讨论】:
-
推送前是否通过值传递
Holder或App?请创建Minimal, Complete, and Verifiable Example 并向我们展示您如何使用这些课程。另外请告诉我们您是如何检查前后没有物品的。 -
@JoachimPileborg 抱歉,我不明白您所说的“按价值传递”是什么意思。
-
如果你把一个对象按值传递给一个函数,它是复制的,不管你对副本做了什么改变,它仍然是对副本做的并且不会' t 反映在原始对象中。
-
好的,我知道。我之前没有通过
Holder和App。holder属于App类。而queue q是它的字段。