| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index 69a9c9c8247d1919d55fba58f39d8c0a35a8bf4e..c9fc23ec66eb96ca6469b5be649b5afbbd43d195 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -665,8 +665,8 @@ template <class T> class PersistentBase {
|
| friend class Object;
|
|
|
| explicit V8_INLINE PersistentBase(T* val) : val_(val) {}
|
| - PersistentBase(PersistentBase& other); // NOLINT
|
| - void operator=(PersistentBase&);
|
| + PersistentBase(PersistentBase& other) = delete; // NOLINT
|
| + void operator=(PersistentBase&) = delete;
|
| V8_INLINE static T* New(Isolate* isolate, T* that);
|
|
|
| T* val_;
|
| @@ -814,16 +814,11 @@ template <class T, class M> class Persistent : public PersistentBase<T> {
|
| */
|
| template<class T>
|
| class UniquePersistent : public PersistentBase<T> {
|
| - struct RValue {
|
| - V8_INLINE explicit RValue(UniquePersistent* obj) : object(obj) {}
|
| - UniquePersistent* object;
|
| - };
|
| -
|
| public:
|
| /**
|
| * A UniquePersistent with no storage cell.
|
| */
|
| - V8_INLINE UniquePersistent() : PersistentBase<T>(0) { }
|
| + V8_INLINE UniquePersistent() : PersistentBase<T>(nullptr) {}
|
| /**
|
| * Construct a UniquePersistent from a Handle.
|
| * When the Handle is non-empty, a new storage cell is created
|
| @@ -847,34 +842,32 @@ class UniquePersistent : public PersistentBase<T> {
|
| /**
|
| * Move constructor.
|
| */
|
| - V8_INLINE UniquePersistent(RValue rvalue)
|
| - : PersistentBase<T>(rvalue.object->val_) {
|
| - rvalue.object->val_ = 0;
|
| + V8_INLINE UniquePersistent(UniquePersistent&& other)
|
| + : PersistentBase<T>(other.val_) {
|
| + other.val_ = nullptr;
|
| }
|
| V8_INLINE ~UniquePersistent() { this->Reset(); }
|
| /**
|
| * Move via assignment.
|
| */
|
| - template<class S>
|
| - V8_INLINE UniquePersistent& operator=(UniquePersistent<S> rhs) {
|
| + template <class S>
|
| + V8_INLINE UniquePersistent& operator=(UniquePersistent<S>&& rhs) {
|
| TYPE_CHECK(T, S);
|
| - this->Reset();
|
| - this->val_ = rhs.val_;
|
| - rhs.val_ = 0;
|
| + if (this != &rhs) {
|
| + this->Reset();
|
| + this->val_ = rhs.val_;
|
| + rhs.val_ = nullptr;
|
| + }
|
| return *this;
|
| }
|
| /**
|
| - * Cast operator for moves.
|
| - */
|
| - V8_INLINE operator RValue() { return RValue(this); }
|
| - /**
|
| * Pass allows returning uniques from functions, etc.
|
| */
|
| - UniquePersistent Pass() { return UniquePersistent(RValue(this)); }
|
| + UniquePersistent Pass() { return static_cast<UniquePersistent&&>(*this); }
|
|
|
| private:
|
| - UniquePersistent(UniquePersistent&);
|
| - void operator=(UniquePersistent&);
|
| + UniquePersistent(UniquePersistent&) = delete;
|
| + void operator=(UniquePersistent&) = delete;
|
| };
|
|
|
|
|
|
|