diff -urN cgicc.orig/Cgicc.cpp cgicc/Cgicc.cpp --- cgicc.orig/Cgicc.cpp 2017-06-27 21:38:02.000000000 +0200 +++ cgicc/Cgicc.cpp 2018-03-26 08:30:13.507547000 +0200 @@ -497,10 +497,10 @@ MultipartHeader head = parseHeader(data.substr(0, valueStart)); if(head.getFilename().empty()) - fFormData.push_back(FormEntry(head.getName(), value)); + fFormData.emplace_back(head.getName(), std::move(value)); else - fFormFiles.push_back(FormFile(head.getName(), + fFormFiles.emplace_back(head.getName(), head.getFilename(), head.getContentType(), - value)); + std::move(value)); } diff -urN cgicc.orig/FormEntry.h cgicc/FormEntry.h --- cgicc.orig/FormEntry.h 2017-06-27 21:38:02.000000000 +0200 +++ cgicc/FormEntry.h 2018-03-26 08:29:15.767638000 +0200 @@ -97,6 +97,11 @@ const std::string& value) : fName(name), fValue(value) {} + inline + FormEntry(std::string&& name, + std::string&& value) + : fName(std::forward(name)), fValue(std::forward(value)) + {} /*! * \brief Copy constructor. diff -urN cgicc.orig/FormFile.cpp cgicc/FormFile.cpp --- cgicc.orig/FormFile.cpp 2017-06-27 21:38:02.000000000 +0200 +++ cgicc/FormFile.cpp 2018-03-26 09:14:43.750957309 +0200 @@ -39,6 +39,17 @@ fDataType = dataType.empty() ? std::string("text/plain") : dataType; } +cgicc::FormFile::FormFile(std::string&& name, + std::string&& filename, + std::string&& dataType, + std::string&& data) + : fName(std::forward(name)), + fFilename(std::forward(filename)), + fData(std::forward(data)) +{ + fDataType = dataType.empty() ? std::string("text/plain") : dataType; +} + bool cgicc::FormFile::operator== (const FormFile& file) const { diff -urN cgicc.orig/FormFile.h cgicc/FormFile.h --- cgicc.orig/FormFile.h 2017-06-27 21:38:02.000000000 +0200 +++ cgicc/FormFile.h 2018-03-26 08:59:01.813701000 +0200 @@ -92,6 +92,10 @@ const std::string& filename, const std::string& dataType, const std::string& data); + FormFile(std::string&& name, + std::string&& filename, + std::string&& dataType, + std::string&& data); /*! * \brief Copy constructor.