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:
Lars Knoll 2014-06-12 10:52:32 +02:00 committed by Simon Hausmann
parent a400d33e81
commit d41121119b
1 changed files with 4 additions and 4 deletions

View File

@ -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;
}