Merge #16001: Give WalletModel::UnlockContext move semantics

0b09a57ae Give WalletModel::UnlockContext move semantics (Pieter Wuille)

Pull request description:

  WalletModel::UnlockContext seems to implement "move upon copy" semantics; with C++11 this can be done more safely using move semantics (making attempts to actually copy fail instead).

  Not a big deal if this isn't worth review time.

ACKs for commit 0b09a5:
  Empact:
    utACK 0b09a57aec
  jonasschnelli:
    utACK 0b09a57aec
  jb55:
    utACK 0b09a57aec

Tree-SHA512: f827856586afd03666c2d9f50320776afb3dd511ac1bcd293b330f015acd1588551b163dccc97b1351301e3295f4c74d90e5754bcee89faeadf6437d7db165c8
This commit is contained in:
MeshCollider 2019-05-20 00:13:31 +12:00
commit 7263424458
No known key found for this signature in database
GPG key ID: D300116E1C875A3D
2 changed files with 8 additions and 5 deletions

View file

@ -482,7 +482,7 @@ WalletModel::UnlockContext::~UnlockContext()
} }
} }
void WalletModel::UnlockContext::CopyFrom(const UnlockContext& rhs) void WalletModel::UnlockContext::CopyFrom(UnlockContext&& rhs)
{ {
// Transfer context; old object no longer relocks wallet // Transfer context; old object no longer relocks wallet
*this = rhs; *this = rhs;

View file

@ -194,15 +194,18 @@ public:
bool isValid() const { return valid; } bool isValid() const { return valid; }
// Copy operator and constructor transfer the context // Copy constructor is disabled.
UnlockContext(const UnlockContext& obj) { CopyFrom(obj); } UnlockContext(const UnlockContext&) = delete;
UnlockContext& operator=(const UnlockContext& rhs) { CopyFrom(rhs); return *this; } // Move operator and constructor transfer the context
UnlockContext(UnlockContext&& obj) { CopyFrom(std::move(obj)); }
UnlockContext& operator=(UnlockContext&& rhs) { CopyFrom(std::move(rhs)); return *this; }
private: private:
WalletModel *wallet; WalletModel *wallet;
bool valid; bool valid;
mutable bool relock; // mutable, as it can be set to false by copying mutable bool relock; // mutable, as it can be set to false by copying
void CopyFrom(const UnlockContext& rhs); UnlockContext& operator=(const UnlockContext&) = default;
void CopyFrom(UnlockContext&& rhs);
}; };
UnlockContext requestUnlock(); UnlockContext requestUnlock();