我来自Java背景,因此习惯于直接移动对象,但我在C++中遇到了问题。基本上我有一个message
对象,我创建了一个循环。在该循环中,我将message
对象传递给要编辑的函数并设置其值。然后我将对象返回到循环。编辑完对象后,我想将它保存到与此循环存储在同一个类中的向量中,它正在运行。如何将自定义对象存储在矢量中以便在C++中使用服务器时的存储
我面临的问题是,在循环运行几次之后,我希望我应该能够访问矢量,并有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 << "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");
}
}
这里是.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;
};
如果你不想要'消息'的副本,你最好使用'std :: unique_ptr'来存储向量。 –
你的'std :: vector'在哪里?请显示'消息'的声明的相关部分,所以**编辑您的问题**请 –
只是为了澄清:'messages.push_back(消息)'部分将创建'消息'对象的副本存储在'消息'对象。如果你的数据不正确,我假设'Message' copy c'tor失败。 – m8mble