如何将自定义对象存储在向量中,以便在c+中的服务器生命周期内进行存储+; 我来自java背景,所以我习惯于直接移动对象,但是C++中有这样的问题。基本上,我在循环中创建了一个消息对象。在该循环中,我将消息对象传递到一个要编辑的函数中,并设置其值。然后我将对象返回到循环中。编辑完对象后,我想将其保存在一个向量中,该向量存储在与其运行的循环相同的类中
我面临的问题是,在运行循环几次(比如三次)之后,我希望我能够访问向量并拥有三个具有唯一值的独立对象,因为循环每次都应该创建一个新对象,但我发现所有元素都包含与最近存储的对象相同的信息 我猜这与指针和引用的使用有关。我在stack overflow中搜索过类似的问题,但到目前为止没有任何帮助。以下是一些代码片段: 创建消息:如何将自定义对象存储在向量中,以便在c+中的服务器生命周期内进行存储+; 我来自java背景,所以我习惯于直接移动对象,但是C++中有这样的问题。基本上,我在循环中创建了一个消息对象。在该循环中,我将消息对象传递到一个要编辑的函数中,并设置其值。然后我将对象返回到循环中。编辑完对象后,我想将其保存在一个向量中,该向量存储在与其运行的循环相同的类中,c++,vector,storage,temporary,C++,Vector,Storage,Temporary,我面临的问题是,在运行循环几次(比如三次)之后,我希望我能够访问向量并拥有三个具有唯一值的独立对象,因为循环每次都应该创建一个新对象,但我发现所有元素都包含与最近存储的对象相同的信息 我猜这与指针和引用的使用有关。我在stack overflow中搜索过类似的问题,但到目前为止没有任何帮助。以下是一些代码片段: 创建消息: void Server::handle(int client) { //cout << "CONNECTED! :)\n"; while (1)
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);
}
void服务器::句柄(int客户端){
//cout我让它工作了。我必须创建一个新的指针对象,然后从message对象复制所有值,并将其存储。此外,我意识到我在引用“message”对象而不是“messages”时出现了一个逻辑错误对象。在这些修复之后,代码正在运行!:)感谢大家的帮助,这是对m*mble最大的帮助,让我多考虑一些点。如果你不想要消息的副本,最好使用std::unique_ptr
存储在向量中。你的std::vector
在哪里?请显示declar的相关部分对̀消息
进行编辑,因此请编辑您的问题以澄清:消息。推回(消息)
部件将创建存储在消息
对象中的消息
对象的副本。如果您的数据不正确,我假设消息
复制任务失败。每当您将参数/返回类型声明为纯字符串
或消息
时,您都在复制它。是否通过当您不打算传递副本时,通过(const)引用((const)&
)对事物进行复制。惯用的方法是正确定义复制构造函数。
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 << "put\n";
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] << " bytes\n";
messages.push_back(message);
send_response(client,"OK\n");
}
}
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;
};