aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/comptr.h6
-rw-r--r--common/intrusive_ptr.h8
2 files changed, 6 insertions, 8 deletions
diff --git a/common/comptr.h b/common/comptr.h
index 5984ebd9..3dc574e8 100644
--- a/common/comptr.h
+++ b/common/comptr.h
@@ -46,10 +46,8 @@ public:
{
if(likely(&rhs != this))
{
- if(mPtr)
- mPtr->Release();
- mPtr = rhs.mPtr;
- rhs.mPtr = nullptr;
+ if(mPtr) mPtr->Release();
+ mPtr = std::exchange(rhs.mPtr, nullptr);
}
return *this;
}
diff --git a/common/intrusive_ptr.h b/common/intrusive_ptr.h
index 31afa70f..9e206a6b 100644
--- a/common/intrusive_ptr.h
+++ b/common/intrusive_ptr.h
@@ -62,6 +62,8 @@ public:
intrusive_ptr& operator=(const intrusive_ptr &rhs) noexcept
{
+ static_assert(noexcept(std::declval<T*>()->release()), "release must be noexcept");
+
if(rhs.mPtr) rhs.mPtr->add_ref();
if(mPtr) mPtr->release();
mPtr = rhs.mPtr;
@@ -71,10 +73,8 @@ public:
{
if(likely(&rhs != this))
{
- if(mPtr)
- mPtr->release();
- mPtr = rhs.mPtr;
- rhs.mPtr = nullptr;
+ if(mPtr) mPtr->release();
+ mPtr = std::exchange(rhs.mPtr, nullptr);
}
return *this;
}