AK: Make Bitmap movable but not copyable.

We were falling back to an incorrect compiler-generated copy ctor for
this class, and let's not do that.

Found by PVS-Studio.
This commit is contained in:
Andreas Kling 2019-08-01 11:34:36 +02:00
parent 1a13145cb3
commit a3ee35510f
Notes: sideshowbarker 2024-07-19 12:57:44 +09:00

View file

@ -1,13 +1,15 @@
#pragma once #pragma once
#include "Assertions.h" #include <AK/Assertions.h>
#include "StdLibExtras.h" #include <AK/Noncopyable.h>
#include "Types.h" #include <AK/StdLibExtras.h>
#include "kmalloc.h" #include <AK/Types.h>
#include <AK/kmalloc.h>
namespace AK { namespace AK {
class Bitmap { class Bitmap {
AK_MAKE_NONCOPYABLE(Bitmap)
public: public:
// NOTE: A wrapping Bitmap won't try to free the wrapped data. // NOTE: A wrapping Bitmap won't try to free the wrapped data.
static Bitmap wrap(u8* data, int size) static Bitmap wrap(u8* data, int size)
@ -25,6 +27,25 @@ public:
return Bitmap(); return Bitmap();
} }
Bitmap(Bitmap&& other)
{
m_owned = exchange(other.m_owned, false);
m_data = exchange(other.m_data, nullptr);
m_size = exchange(other.m_size, 0);
}
Bitmap& operator=(Bitmap&& other)
{
if (this != &other) {
if (m_owned)
kfree(m_data);
m_owned = exchange(other.m_owned, false);
m_data = exchange(other.m_data, nullptr);
m_size = exchange(other.m_size, 0);
}
return *this;
}
~Bitmap() ~Bitmap()
{ {
if (m_owned) if (m_owned)