Class 对数据成员的修改在函数结束后不会持久
我有一个简单的层次结构,它由一个代理组成,该代理有一个Class 对数据成员的修改在函数结束后不会持久,class,c++11,stdvector,Class,C++11,Stdvector,我有一个简单的层次结构,它由一个代理组成,该代理有一个ConversationManager\u manager*数据成员,该成员在std::vector Conversations中处理任意数量的会话,该会话本身在std::vector Messages中包含1-5条消息 如果我通过 ConversationManager::startConversation(Message &message) { Conversation conversation = Conversatio
ConversationManager\u manager*
数据成员,该成员在std::vector Conversations
中处理任意数量的会话,该会话本身在std::vector Messages
中包含1-5条消息
如果我通过
ConversationManager::startConversation(Message &message) {
Conversation conversation = Conversation(message);
conversations.push_back(conversation)
}
消息已正确保存。
但是在通过
int ConversationManager::addMessage(Message &message){
if(conversations.size() > 0){
Conversation conversation = conversations.back();
conversation.addMessage(message);
return 0;
}
return -1;
}
及
除第一条消息外,不会保存后续消息。在Conversation::addMessage(Message&Message)
中打印消息的大小和内容表明我的消息保存在该函数中,但在函数范围结束时似乎丢失了。据我所知,一种解释是,ConversationManager::addMessage(Message&Message)
中使用的conversation
对象只是一个副本,因此不会保存修改。但是std::Vector::back()
返回一个引用,所以这应该是不可能的
我尝试只使用一个对话对象而不使用ConversationManager,然后消息将被永久保存。我觉得问题在于我对参考用法的误解。我不认为需要更多的代码来理解,但如果有人认为需要,我可以提供它。我想我在这里犯了一个根本性的错误,但我无法摆脱“这不应该发生”的思维定势。
Conversation conversation = conversations.back();
创建一个副本。
使用
使用引用。这就是问题所在:
if(conversations.size() > 0){
Conversation conversation = conversations.back();
conversation.addMessage(message);
return 0;
}
上面代码段的第二行复制了一段对话,然后在副本中添加了一条消息。然后,最近修改的副本在块末尾超出范围时“消失”
您可以创建对对话的引用,然后修改现有对话,如下所示:
if(conversations.size() > 0){
Conversation& conversation = conversations.back(); // note reference
conversation.addMessage(message);
return 0;
}
哇,我真傻。谢谢你的及时答复
if(conversations.size() > 0){
Conversation conversation = conversations.back();
conversation.addMessage(message);
return 0;
}
if(conversations.size() > 0){
Conversation& conversation = conversations.back(); // note reference
conversation.addMessage(message);
return 0;
}