Avoid string duplication when returning StringBuilder strings

The const-ref result of .str() must be copied into the returned
value, whereas the result of .Release() can be moved.

Bug: webrtc:374845009
Change-Id: I3abc98be30ce9947127c7664f5ffa6846b772ea2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/366480
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43288}
diff --git a/api/video_codecs/sdp_video_format.cc b/api/video_codecs/sdp_video_format.cc
index 1986573..2b28ffa 100644
--- a/api/video_codecs/sdp_video_format.cc
+++ b/api/video_codecs/sdp_video_format.cc
@@ -181,7 +181,7 @@
     builder << "]";
   }
 
-  return builder.str();
+  return builder.Release();
 }
 
 bool SdpVideoFormat::IsSameCodec(const SdpVideoFormat& other) const {
diff --git a/net/dcsctp/packet/chunk/forward_tsn_chunk.cc b/net/dcsctp/packet/chunk/forward_tsn_chunk.cc
index 1f22e35..758f2ea 100644
--- a/net/dcsctp/packet/chunk/forward_tsn_chunk.cc
+++ b/net/dcsctp/packet/chunk/forward_tsn_chunk.cc
@@ -90,6 +90,6 @@
   for (const auto& skipped : skipped_streams()) {
     sb << ", skip " << skipped.stream_id.value() << ":" << *skipped.ssn;
   }
-  return sb.str();
+  return sb.Release();
 }
 }  // namespace dcsctp
diff --git a/p2p/base/connection.cc b/p2p/base/connection.cc
index bb79096..6caa7da 100644
--- a/p2p/base/connection.cc
+++ b/p2p/base/connection.cc
@@ -894,7 +894,7 @@
       oss << rtc::hex_encode(ping.id) << " ";
     }
   }
-  *s = oss.str();
+  *s = oss.Release();
 }
 
 bool Connection::selected() const {
diff --git a/pc/simulcast_sdp_serializer.cc b/pc/simulcast_sdp_serializer.cc
index 225c733..521ec4e 100644
--- a/pc/simulcast_sdp_serializer.cc
+++ b/pc/simulcast_sdp_serializer.cc
@@ -196,7 +196,7 @@
        << simulcast.receive_layers();
   }
 
-  return sb.str();
+  return sb.Release();
 }
 
 // https://tools.ietf.org/html/draft-ietf-mmusic-sdp-simulcast-13#section-5.1
@@ -305,7 +305,7 @@
     propertyDelimiter = kDelimiterSemicolon;
   }
 
-  return builder.str();
+  return builder.Release();
 }
 
 // https://tools.ietf.org/html/draft-ietf-mmusic-rid-15#section-10
diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc
index cab245a..2f17eef 100644
--- a/pc/webrtc_sdp.cc
+++ b/pc/webrtc_sdp.cc
@@ -804,7 +804,7 @@
 
 // Gets "a=rtcp" line if found default RTCP candidate from `candidates`.
 static std::string GetRtcpLine(const std::vector<Candidate>& candidates) {
-  std::string rtcp_line, rtcp_port, rtcp_ip, addr_type;
+  std::string rtcp_port, rtcp_ip, addr_type;
   GetDefaultDestination(candidates, ICE_CANDIDATE_COMPONENT_RTCP, &rtcp_port,
                         &rtcp_ip, &addr_type);
   // Found default RTCP candidate.
@@ -819,8 +819,7 @@
   InitAttrLine(kAttributeRtcp, &os);
   os << kSdpDelimiterColon << rtcp_port << " " << kConnectionNettype << " "
      << addr_type << " " << rtcp_ip;
-  rtcp_line = os.str();
-  return rtcp_line;
+  return os.Release();
 }
 
 // Get candidates according to the mline index from SessionDescriptionInterface.