我有一个多线程程序(客户端-服务器程序,但在这个问题中不一定相关),其中多个线程访问全局队列。有两个队列:哪个是 type msgs_inc
,我的班级在哪里。clients_msg
queue<msgInfo>
msgInfo
第一个线程从客户端接收消息,执行以下操作(相关片段):
msgInfo message_processed(message_fr_client); //line 1: takes in string
msgs_inc.push(message_processed); //line 2
第二个线程应该从 中检索msgs_inc
、处理它们,然后推入clients_msg
.
msgInfo msg_from_queue(msgs_inc); //line 3: retrieve from front of queue
msgs_inc.pop(); //line 4
clients_msg.push(msg_from_queue); //line 5
第三个线程从 中检索clients_msg
,之后不再需要它。
msgInfo msg_from_queue(clients_msg); //line 6: retrieve from front of queue
clients_msg.pop(); //line 7
我的问题是:
- 在第 3 行中,这个构造函数(下文详述)是被称为复制构造函数还是标准构造函数?
- 我是否错误地“实例化”
msgInfo
了两次,即在将其推入之前一次,然后在检索它之前再一次?我应该使用指针或其他东西吗?感觉它可能效率低下,但我不知道另一种方法。 - 我什么时候应用析构函数?我是否只在第 7 行之后应用它,当我不再需要它时,或者我是否需要在第 4 行再次应用析构函数,因为我已经
msgInfo
使用该信息创建了另一个实例?
对于这种乏味,我深表歉意-我找不到有关此的信息,也无法得出一个具体的结论。
这是我的课:
class msgInfo
{
public:
msgInfo();
msgInfo(std::string); //creating instance fr string rxed fr client
msgInfo(std::map<int, std::map<int, std::queue<msgInfo>>>, int, int); //creating instance for string to be sent to client
~msgInfo();
private:
int source_id;
int dest_id;
int priority;
std::string payload;
std::list<int> nodePath;
};
第 3 行和第 6 行使用的构造函数:
msgInfo::msgInfo(std::queue<msgInfo> outgoing_msg)
{
source_id = outgoing_msg.front().source_id;
dest_id = outgoing_msg.front().dest_id;
priority = outgoing_msg.front().priority;
payload = outgoing_msg.front().payload;
nodePath = outgoing_msg.front().nodePath;
}