From 838c1364f5169801c0c4a98cd30d368c269ee844 Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Fri, 11 Apr 2025 08:21:35 +0200 Subject: [PATCH] MT#59962 XmlRpcValue: avoid unnecessary copy Fixes: *** CID 549009: Performance inefficiencies (COPY_INSTEAD_OF_MOVE) /apps/xmlrpc2di/xmlrpc++/src/XmlRpcValue.cpp: 515 in XmlRpc::XmlRpcValue::structFromXml(const std::__cxx11::basic_string, std::allocator> &, unsigned long *)() 509 XmlRpcValue val(valueXml, offset); 510 if ( ! val.valid()) { 511 invalidate(); 512 return false; 513 } 514 const std::pair p(name, val); >>> CID 549009: Performance inefficiencies (COPY_INSTEAD_OF_MOVE) >>> "p" is copied and then passed-by-reference as parameter to STL insertion function "std::map, std::allocator >, XmlRpc::XmlRpcValue, std::less, std::allocator > >, std::allocator, std::allocator > const, XmlRpc::XmlRpcValue> > >::insert(std::map, std::allocator >, XmlRpc::XmlRpcValue, std::less, std::allocator > >, std::allocator, std::allocator > const, XmlRpc::XmlRpcValue> > >::value_type const &)", when it could be moved instead. 515 _value.asStruct->insert(p); 516 517 (void) XmlRpcUtil::nextTagIs(MEMBER_ETAG, valueXml, offset); 518 } 519 return true; 520 } Change-Id: I1fe8412aca61a1671260d64bf11afb311ede8ce9 --- apps/xmlrpc2di/xmlrpc++/src/XmlRpcValue.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/xmlrpc2di/xmlrpc++/src/XmlRpcValue.cpp b/apps/xmlrpc2di/xmlrpc++/src/XmlRpcValue.cpp index 5dcef890..dc25bb6d 100644 --- a/apps/xmlrpc2di/xmlrpc++/src/XmlRpcValue.cpp +++ b/apps/xmlrpc2di/xmlrpc++/src/XmlRpcValue.cpp @@ -514,8 +514,8 @@ namespace XmlRpc { invalidate(); return false; } - const std::pair p(name, val); - _value.asStruct->insert(p); + + _value.asStruct->insert(std::make_pair(std::move(name), std::move(val))); (void) XmlRpcUtil::nextTagIs(MEMBER_ETAG, valueXml, offset); }