aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJames R. Barlow <james@purplerock.ca>2022-09-04 23:48:25 +0200
committerJames R. Barlow <james@purplerock.ca>2022-09-05 22:29:56 +0200
commit12967bdf8a271faeaf160b88bc8c5c800703af82 (patch)
tree642d4000430b037c2cea9ad2f44fc8e8e87e70dc /libqpdf
parent952b00aecd7bfdf9db50eb6b3d922ce17e1b606c (diff)
downloadqpdf-12967bdf8a271faeaf160b88bc8c5c800703af82.tar.zst
Take advantage of unique_ptr and move construction for Buffer
Since Buffer has always implemented its copy constructor with a deep copy, its Members object will never have multiple owners. Change to unique_ptr. Also implement move constructors for Buffer, since there may be cases where a deep copy is not needed.
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/Buffer.cc14
1 files changed, 13 insertions, 1 deletions
diff --git a/libqpdf/Buffer.cc b/libqpdf/Buffer.cc
index 4e8a17ae..98a524ce 100644
--- a/libqpdf/Buffer.cc
+++ b/libqpdf/Buffer.cc
@@ -48,12 +48,24 @@ Buffer::operator=(Buffer const& rhs)
return *this;
}
+Buffer::Buffer(Buffer&& rhs) noexcept :
+ m(std::move(rhs.m))
+{
+}
+
+Buffer&
+Buffer::operator=(Buffer&& rhs) noexcept
+{
+ std::swap(this->m, rhs.m);
+ return *this;
+}
+
void
Buffer::copy(Buffer const& rhs)
{
if (this != &rhs) {
this->m =
- std::shared_ptr<Members>(new Members(rhs.m->size, nullptr, true));
+ std::unique_ptr<Members>(new Members(rhs.m->size, nullptr, true));
if (this->m->size) {
memcpy(this->m->buf, rhs.m->buf, this->m->size);
}