Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
KDevelop
KDevelop
Commits
2eca1246
Commit
2eca1246
authored
Oct 16, 2021
by
Igor Kushnir
Browse files
Implement OwningRawPointerContainer utility
parent
e4ea3642
Changes
2
Hide whitespace changes
Inline
Side-by-side
kdevplatform/util/CMakeLists.txt
View file @
2eca1246
...
...
@@ -91,6 +91,7 @@ install( FILES
convenientfreelist.h
multilevellistview.h
objectlist.h
owningrawpointercontainer.h
placeholderitemproxymodel.h
projecttestjob.h
widgetcolorizer.h
...
...
kdevplatform/util/owningrawpointercontainer.h
0 → 100644
View file @
2eca1246
/*
SPDX-FileCopyrightText: 2021 Igor Kushnir <igorkuo@gmail.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#ifndef KDEVPLATFORM_OWNING_RAW_POINTER_CONTAINER_H
#define KDEVPLATFORM_OWNING_RAW_POINTER_CONTAINER_H
#include
<utility>
namespace
KDevelop
{
/**
* A RAII wrapper for a container of owning raw pointers.
*
* Storing an OwningRawPointerContainer<C> in a class is equivalent to storing
* C @a c itself and calling qDeleteAll(@a c) in the destructor. The only usage
* difference is dereferencing OwningRawPointerContainer via operator* or operator->.
*/
template
<
typename
C
>
class
OwningRawPointerContainer
{
public:
OwningRawPointerContainer
()
=
default
;
OwningRawPointerContainer
(
OwningRawPointerContainer
&&
other
)
:
m_c
{
std
::
move
(
other
.
m_c
)}
{
other
.
m_c
=
{};
}
OwningRawPointerContainer
(
const
OwningRawPointerContainer
&
)
=
delete
;
~
OwningRawPointerContainer
()
{
for
(
const
auto
*
ptr
:
std
::
as_const
(
m_c
))
{
delete
ptr
;
}
}
OwningRawPointerContainer
&
operator
=
(
OwningRawPointerContainer
&&
other
)
{
m_c
=
std
::
move
(
other
.
m_c
);
other
.
m_c
=
{};
}
OwningRawPointerContainer
&
operator
=
(
const
OwningRawPointerContainer
&
)
=
delete
;
const
C
&
operator
*
()
const
{
return
m_c
;
}
C
&
operator
*
()
{
return
m_c
;
}
const
C
*
operator
->
()
const
{
return
&
m_c
;
}
C
*
operator
->
()
{
return
&
m_c
;
}
private:
C
m_c
{};
};
}
#endif // KDEVPLATFORM_OWNING_RAW_POINTER_CONTAINER_H
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment