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;
}