11class UniqueOwnerPointer {
13 std::unique_ptr<Bedrock::EnableNonOwnerReferences> mEnableNonOwnerReferences;
14 std::unique_ptr<T> mValue;
17 UniqueOwnerPointer() =
default;
18 UniqueOwnerPointer(nullptr_t) {}
19 ~UniqueOwnerPointer() =
default;
21 UniqueOwnerPointer(UniqueOwnerPointer
const&) =
delete;
22 UniqueOwnerPointer& operator=(UniqueOwnerPointer
const&) =
delete;
24 UniqueOwnerPointer(UniqueOwnerPointer&&) =
default;
25 UniqueOwnerPointer& operator=(UniqueOwnerPointer&&) =
default;
27 UniqueOwnerPointer(std::unique_ptr<T> ptr)
28 : mEnableNonOwnerReferences(std::make_unique<Bedrock::EnableNonOwnerReferences>(*ptr)),
29 mValue(std::move(ptr)) {}
31 UniqueOwnerPointer& operator=(nullptr_t) { reset(); }
33 T* get()
const {
return mValue.get(); }
34 T* operator->()
const {
return get(); }
35 T& operator*()
const {
return *get(); }
37 bool isValid()
const {
return mValue !=
nullptr; }
38 explicit operator bool()
const {
return isValid(); }
41 mEnableNonOwnerReferences.reset();
45 bool operator==(UniqueOwnerPointer
const& other)
const {
return mValue == other.mValue; }
46 bool operator==(nullptr_t)
const {
return mValue ==
nullptr; }