Make LuaSmartRef properly non-copyable

Broken since 06e2836726, which added LuaSmartRef. That it had absolutely not followed the rule of five at all didn't use to be a problem because it had only ever been in vectors that got resized only once throughout the lifetime of the program >_>
This commit is contained in:
Tamás Bálint Misius
2024-11-20 20:30:43 +01:00
parent afb9fa7df2
commit 0c74c8080d

View File

@@ -1,12 +1,27 @@
#pragma once
#include "LuaCompat.h"
#include <utility>
class LuaSmartRef
{
int ref = LUA_REFNIL;
public:
LuaSmartRef() = default;
LuaSmartRef(const LuaSmartRef &other) = delete;
~LuaSmartRef();
LuaSmartRef(LuaSmartRef &&other) noexcept : LuaSmartRef()
{
swap(*this, other);
}
LuaSmartRef &operator =(LuaSmartRef other)
{
swap(*this, other);
return *this;
}
void Assign(lua_State *L, int index); // Copies the value before getting reference, stack unchanged.
void Clear();
int Push(lua_State *L); // Always pushes exactly one value, possibly nil.
@@ -20,4 +35,10 @@ public:
{
return ref != LUA_REFNIL;
}
friend void swap(LuaSmartRef &one, LuaSmartRef &other)
{
using std::swap;
swap(one.ref, other.ref);
}
};