]> granicus.if.org Git - taglib/commitdiff
FilePrivate is responsible to delete a stream pointer instead of File.
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Wed, 8 Feb 2017 08:45:46 +0000 (17:45 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Wed, 8 Feb 2017 08:49:48 +0000 (17:49 +0900)
Generally, TagLib leaves the Private classes to delete their members.

taglib/toolkit/tfile.cpp

index 897400b8cdeea897c5a84d3ac78126ffc9d53b42..aff1684d9c2d6f71abe8a57a7c9922ed93051928 100644 (file)
@@ -69,20 +69,22 @@ using namespace TagLib;
 class File::FilePrivate
 {
 public:
-  FilePrivate(IOStream *stream, bool owner);
+  FilePrivate(IOStream *stream, bool owner) :
+    stream(stream),
+    streamOwner(owner),
+    valid(true) {}
+
+  ~FilePrivate()
+  {
+    if(streamOwner)
+      delete stream;
+  }
 
   IOStream *stream;
   bool streamOwner;
   bool valid;
 };
 
-File::FilePrivate::FilePrivate(IOStream *stream, bool owner) :
-  stream(stream),
-  streamOwner(owner),
-  valid(true)
-{
-}
-
 ////////////////////////////////////////////////////////////////////////////////
 // public members
 ////////////////////////////////////////////////////////////////////////////////
@@ -99,8 +101,6 @@ File::File(IOStream *stream) :
 
 File::~File()
 {
-  if(d->stream && d->streamOwner)
-    delete d->stream;
   delete d;
 }