如何将自定义对象存储在向量中,以便在服务器的生命周期中存储

How to store custom objects in a vector for storage during the life of a server in c++

本文关键字:存储 服务器 周期 生命 向量 自定义 对象      更新时间:2023-10-16

我来自Java背景,所以我习惯于直接移动对象,但我在c++中这样做有麻烦。基本上我有一个在循环中创建的message对象。在该循环中,我将message对象传递给要编辑的函数并设置其值。然后将对象返回到循环中。编辑完对象后,我想将其保存在一个vector中,该vector与它所在的循环存储在同一个类中。

我面临的问题是,在运行循环几次之后,比如说三次,我希望我应该能够访问向量并拥有3个具有唯一值的独立对象,因为循环每次都应该创建一个新的对象,但相反,我发现所有元素都包含与最近存储的对象相同的信息。

我猜它与指针和引用使用有关。我已经搜索堆栈溢出类似的问题,但没有任何帮助到目前为止。下面是一些代码片段:

创建消息:

void Server::handle(int client) {
    //cout << "CONNECTED! :)n";
    while (1) {
        string request = "";
        Message message;
        message.needed = false;
        request = get_request(client);
        if (request.empty()){break;}
         message = parse_request(request, message);
        //cout << "Parsed request." << "n";
        if (message.needed){
            get_value(client, message);
        }
        handle_message(client, message);
    }
    close(client);
}
编辑:

Message Server::parse_request(string request, Message message) {
    //cout << "Parsing: " << request << "n";
    //Message message; // = new Message();
    istringstream iss(request);
    iss >> message.command; //store the command
    if(message.command=="put")  {
        //cout << "putn";
        iss >> message.params[0]; //store user name
        iss >> message.params[1]; //store subject name
       ....etc
    }
    return message;
}

最后存储:

bool Server::handle_message(int client, Message message){
    if(message.command=="put"){
        int count = 0;
        for(int i=0; i<messages.size(); i++){
            if(messages[i].params[0] == message.params[0]){
                count++;
            }
            cout << "Message: " << message.params[1] << "n";
        }
        message.params[3] = count;
        cout << "Stored a message for: " << message.params[0] << " with " << message.params[2] << " bytesn";
        messages.push_back(message);
        send_response(client,"OKn");
    }   
}

这里是。h:

class Message {
    public: 
        Message();
        ~Message(); 
        string command;
        string params[4];
        string value;
        bool needed;
    private:
        bool copy(Message message);
};
class Server {
    public:
        Server(int port, bool debugging);
        ~Server();
        void run();
    private:
        void create();
        void close_socket();
        void serve();
        void handle(int);
        string get_request(int);
        bool send_response(int, string);
        Message parse_request(string, Message);
        void get_value(int, Message);
        bool handle_message(int,Message);
        int port_;
        int server_;
        int buflen_;
        char* buf_; 
        string requestcache;
        string valuecache;
        bool debug_;
        vector<Message> messages;
};

我让它工作了。我必须创建一个新的指针对象,然后从消息对象中复制所有的值并存储它。此外,我意识到我有一个逻辑错误,我引用了"message"对象而不是"messages"对象。在这些修复之后,代码开始运行了!:)谢谢你们的帮助,你们给了我最大的帮助,让我想到了更多的地方。