如何将自定义对象存储在向量中,以便在服务器的生命周期中存储
How to store custom objects in a vector for storage during the life of a server in c++
我来自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"对象。在这些修复之后,代码开始运行了!:)谢谢你们的帮助,你们给了我最大的帮助,让我想到了更多的地方。
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 将 cv::Mat 存储在字节数组中,以便将数据传输到服务器
- 在远程服务器上创建新的存储库
- MSSQL服务器存储过程在从c++调用时不返回输出参数
- 服务器如何存储客户端的 IP 地址?
- 在终端服务服务器会话中存储用户的应用程序首选项。托管C++
- 如何将自定义对象存储在向量中,以便在服务器的生命周期中存储
- 为什么SQL服务器将值传递给存储过程中的OUTPUT变量?
- 如何使用c++和PHP在客户端和云服务器之间正确存储时间戳和偏移量
- 在服务器应用程序中以地图形式存储客户端信息的设计模式建议