gl_resource_manager: Use std::exchange instead of std::swap in move assignment operators and constructors

Move assignment operators and move constructors should ideally leave the object moved from in a state where resources aren't accessable.
This commit is contained in:
MerryMage 2018-03-11 17:22:33 +00:00
parent e9900d8035
commit e3f9bfd850
1 changed files with 36 additions and 24 deletions

View File

@ -13,14 +13,16 @@
class OGLTexture : private NonCopyable {
public:
OGLTexture() = default;
OGLTexture(OGLTexture&& o) {
std::swap(handle, o.handle);
}
OGLTexture(OGLTexture&& o) : handle(std::exchange(o.handle, 0)) {}
~OGLTexture() {
Release();
}
OGLTexture& operator=(OGLTexture&& o) {
std::swap(handle, o.handle);
Release();
handle = std::exchange(o.handle, 0);
return *this;
}
@ -46,14 +48,16 @@ public:
class OGLSampler : private NonCopyable {
public:
OGLSampler() = default;
OGLSampler(OGLSampler&& o) {
std::swap(handle, o.handle);
}
OGLSampler(OGLSampler&& o) : handle(std::exchange(o.handle, 0)) {}
~OGLSampler() {
Release();
}
OGLSampler& operator=(OGLSampler&& o) {
std::swap(handle, o.handle);
Release();
handle = std::exchange(o.handle, 0);
return *this;
}
@ -79,14 +83,16 @@ public:
class OGLShader : private NonCopyable {
public:
OGLShader() = default;
OGLShader(OGLShader&& o) {
std::swap(handle, o.handle);
}
OGLShader(OGLShader&& o) : handle(std::exchange(o.handle, 0)) {}
~OGLShader() {
Release();
}
OGLShader& operator=(OGLShader&& o) {
std::swap(handle, o.handle);
Release();
handle = std::exchange(o.handle, 0);
return *this;
}
@ -112,14 +118,16 @@ public:
class OGLBuffer : private NonCopyable {
public:
OGLBuffer() = default;
OGLBuffer(OGLBuffer&& o) {
std::swap(handle, o.handle);
}
OGLBuffer(OGLBuffer&& o) : handle(std::exchange(o.handle, 0)) {}
~OGLBuffer() {
Release();
}
OGLBuffer& operator=(OGLBuffer&& o) {
std::swap(handle, o.handle);
Release();
handle = std::exchange(o.handle, 0);
return *this;
}
@ -145,14 +153,16 @@ public:
class OGLVertexArray : private NonCopyable {
public:
OGLVertexArray() = default;
OGLVertexArray(OGLVertexArray&& o) {
std::swap(handle, o.handle);
}
OGLVertexArray(OGLVertexArray&& o) : handle(std::exchange(o.handle, 0)) {}
~OGLVertexArray() {
Release();
}
OGLVertexArray& operator=(OGLVertexArray&& o) {
std::swap(handle, o.handle);
Release();
handle = std::exchange(o.handle, 0);
return *this;
}
@ -178,14 +188,16 @@ public:
class OGLFramebuffer : private NonCopyable {
public:
OGLFramebuffer() = default;
OGLFramebuffer(OGLFramebuffer&& o) {
std::swap(handle, o.handle);
}
OGLFramebuffer(OGLFramebuffer&& o) : handle(std::exchange(o.handle, 0)) {}
~OGLFramebuffer() {
Release();
}
OGLFramebuffer& operator=(OGLFramebuffer&& o) {
std::swap(handle, o.handle);
Release();
handle = std::exchange(o.handle, 0);
return *this;
}