[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [digikam/frameworks] libs/dmetadata: Fix crash / memory leak
From:       Marcel Wiesweg <marcel.wiesweg () gmx ! de>
Date:       2015-09-22 16:00:41
Message-ID: E1ZePzl-00088U-Kv () scm ! kde ! org
[Download RAW message or body]

Git commit 53989aa499f183ab818f24a39be9ac16c11d0c05 by Marcel Wiesweg.
Committed on 22/09/2015 at 16:00.
Pushed by mwiesweg into branch 'frameworks'.

Fix crash / memory leak

Also need to reimplement operator= if classes with d-pointer shall be
copyable. Otherwise, C++ will implement a default d=other.d, copying the
pointer.
No need to implement a copyContent method, C++ does that for us.

M  +8    -12   libs/dmetadata/dmetadatasettingscontainer.cpp
M  +1    -0    libs/dmetadata/dmetadatasettingscontainer.h

http://commits.kde.org/digikam/53989aa499f183ab818f24a39be9ac16c11d0c05

diff --git a/libs/dmetadata/dmetadatasettingscontainer.cpp \
b/libs/dmetadata/dmetadatasettingscontainer.cpp index 763291d..78c29e8 100644
--- a/libs/dmetadata/dmetadatasettingscontainer.cpp
+++ b/libs/dmetadata/dmetadatasettingscontainer.cpp
@@ -51,15 +51,6 @@ public:
         unifyReadWrite = false;
     }
 
-    void copyPrivateData(const Private* const other)
-    {
-        readMappings   = other->readMappings;
-        readMappings.detach();
-        writeMappings  = other->writeMappings;
-        writeMappings.detach();
-        unifyReadWrite = other->unifyReadWrite;
-    }
-
 public:
 
     QMap<QLatin1String, QList<NamespaceEntry> > readMappings;
@@ -79,13 +70,18 @@ DMetadataSettingsContainer::DMetadataSettingsContainer()
 DMetadataSettingsContainer::DMetadataSettingsContainer(const \
DMetadataSettingsContainer& other)  : d(new Private)
 {
-    d->copyPrivateData(other.d);
+    *d = *other.d;
+}
+
+DMetadataSettingsContainer& DMetadataSettingsContainer::operator=(const \
DMetadataSettingsContainer& other) +{
+    *d = *other.d;
+    return *this;
 }
 
 DMetadataSettingsContainer::~DMetadataSettingsContainer()
 {
-    // this line crash application
-    //delete d;
+    delete d;
 }
     
 void DMetadataSettingsContainer::readFromConfig(KConfigGroup& group)
diff --git a/libs/dmetadata/dmetadatasettingscontainer.h \
b/libs/dmetadata/dmetadatasettingscontainer.h index 01064e6..ae4d539 100644
--- a/libs/dmetadata/dmetadatasettingscontainer.h
+++ b/libs/dmetadata/dmetadatasettingscontainer.h
@@ -158,6 +158,7 @@ public:
     DMetadataSettingsContainer();
     DMetadataSettingsContainer(const DMetadataSettingsContainer& other);
     ~DMetadataSettingsContainer();
+    DMetadataSettingsContainer& operator=(const DMetadataSettingsContainer& other);
 
 public:
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic