Don't abuse new to do a reinterpret_cast
Using new to do a reinterpret_cast is rather confusing. Also protect the list model case against self-assignment which could lead to memory corruption. Change-Id: I10b81644d0004d4a50a5a74e5b8c58e27cbe6934 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This commit is contained in:
parent
a400d33e81
commit
d41121119b
|
@ -810,7 +810,7 @@ int ListElement::setDoubleProperty(const ListLayout::Role &role, double d)
|
|||
|
||||
if (role.type == ListLayout::Role::Number) {
|
||||
char *mem = getPropertyMemory(role);
|
||||
double *value = new (mem) double;
|
||||
double *value = reinterpret_cast<double *>(mem);
|
||||
bool changed = *value != d;
|
||||
*value = d;
|
||||
if (changed)
|
||||
|
@ -826,7 +826,7 @@ int ListElement::setBoolProperty(const ListLayout::Role &role, bool b)
|
|||
|
||||
if (role.type == ListLayout::Role::Bool) {
|
||||
char *mem = getPropertyMemory(role);
|
||||
bool *value = new (mem) bool;
|
||||
bool *value = reinterpret_cast<bool *>(mem);
|
||||
bool changed = *value != b;
|
||||
*value = b;
|
||||
if (changed)
|
||||
|
@ -842,8 +842,8 @@ int ListElement::setListProperty(const ListLayout::Role &role, ListModel *m)
|
|||
|
||||
if (role.type == ListLayout::Role::List) {
|
||||
char *mem = getPropertyMemory(role);
|
||||
ListModel **value = new (mem) ListModel *;
|
||||
if (*value) {
|
||||
ListModel **value = reinterpret_cast<ListModel **>(mem);
|
||||
if (*value && *value != m) {
|
||||
(*value)->destroy();
|
||||
delete *value;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue