21template <
class Type,
bool DelArray = false>
127 template <
class SourceType>
130 Type* castedPtr =
dynamic_cast<Type*
>(ptr);
132 if (castedPtr !=
nullptr){
133 SetPtr(castedPtr, releaseFn);
151 template <
class SourcePtrType>
154 Type* castedPtr =
dynamic_cast<Type*
>(ptr.get());
156 if (castedPtr !=
nullptr) {
189template <
class Type,
bool DelArray>
196template <
class Type,
bool DelArray>
198:
BaseClass(ptr), m_releaseFn(releaseFlag? SimpleDeleter: nullptr)
203template <
class Type,
bool DelArray>
205:
BaseClass(ptr.get()), m_releaseFn(std::move(ptr.m_releaseFn))
207 ptr.BaseClass::SetPtr(
nullptr);
211template <
class Type,
bool DelArray>
213:
BaseClass(ptr.release()), m_releaseFn(SimpleDeleter)
218template <
class Type,
bool DelArray>
225template <
class Type,
bool DelArray>
232template <
class Type,
bool DelArray>
235 return m_releaseFn !=
nullptr;
239template <
class Type,
bool DelArray>
244 BaseClass::SetPtr(ptr);
246 m_releaseFn = releaseFn;
250template <
class Type,
bool DelArray>
253 if (m_releaseFn ==
nullptr) {
254 return BaseClass::get();
261template <
class Type,
bool DelArray>
264 Type* slavePtr = BaseClass::get();
266 BaseClass::SetPtr(
nullptr);
267 m_releaseFn =
nullptr;
275template <
class Type,
bool DelArray>
278 BaseClass::Swap(ptr);
279 std::swap(m_releaseFn, ptr.m_releaseFn);
283template <
class Type,
bool DelArray>
286 if (ptr.m_releaseFn ==
nullptr){
287 SetPtr(ptr.
m_ptr,
nullptr);
292 Q_ASSERT(ptr.
m_ptr ==
nullptr);
298template <
class Type,
bool DelArray>
301 SetPtr(ptr.m_ptr, std::move(ptr.m_releaseFn));
303 ptr.m_releaseFn =
nullptr;
310template <
class Type,
bool DelArray>
313 SetPtr(ptr.release(), SimpleDeleter);
319template <
class Type,
bool DelArray>
330template <
class Type,
bool DelArray>
344template <
class Type,
bool DelArray>
347 if (m_releaseFn !=
nullptr){
348 Type* ptr = BaseClass::get();
349 if (ptr !=
nullptr) {
Pointer wrapper providing activatable deleting pointed object during destruction.
void Swap(TOptDelPtr &ptr)
Swap two pointers.
TPointerBase< Type > BaseClass
void SetPtr(Type *ptr, ReleaseFn releaseFn=nullptr)
Set new value of internal pointer.
bool IsToRelase() const
Get state of release flag.
std::function< void(Type *)> ReleaseFn
void Reset()
Remove object pointed by internal pointer and set this pointer to nullptr.
TOptDelPtr & operator=(TOptDelPtr &&ptr)
Assign move operator.
TOptDelPtr & operator=(const TOptDelPtr &ptr)
Assign operator.
static void SimpleDeleter(Type *ptr)
Function calling delete operator.
TOptDelPtr & operator=(Type *ptr)
Assign operator.
TOptDelPtr(TOptDelPtr &&ptr)
Move constructor.
TOptDelPtr(const TOptDelPtr &ptr)=delete
TOptDelPtr(std::unique_ptr< Type > &&ptr)
Construct and init this pointer using unique pointer.
TOptDelPtr(Type *ptr, bool releaseFlag)
Construct and init this pointer.
Type * release()
Reset internal pointer value without deleting instance and return previos value.
TOptDelPtr(Type *ptr=nullptr, ReleaseFn releaseFn=nullptr)
Construct and init this pointer.
void Detach()
Remove referenced object.
TOptDelPtr & operator=(std::unique_ptr< Type > &&ptr)
Assign operator.
bool SetCastedOrRemove(SourceType *ptr, ReleaseFn releaseFn=nullptr)
Set internal pointer using casted pointer of other type.
Type * GetFreePtr() const
Get internal pointer only if it is free, it means will be not released.
bool SetCastedOrRemove(std::unique_ptr< SourcePtrType > ptr)
Set internal pointer using casted pointer of other type.
Implementation of pointer wrapper.