aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2022-03-25 16:36:46 -0700
committerChris Robinson <[email protected]>2022-03-25 16:36:46 -0700
commit6d0bd1a5320e3103b10e5263732566c9d63981d9 (patch)
tree3e9a90618752a9c193527cea25c3f0246827089c
parentb80dc504958e116f40ac6e8ab827be57a30aa4b0 (diff)
Simplify some move assignments
-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;
}