Merge pull request #675 from garima-g/patch-1

Add self-assignment check in operator=
This commit is contained in:
Tsuda Kageyu
2015-11-05 15:43:03 +09:00
4 changed files with 21 additions and 14 deletions

View File

@ -86,8 +86,10 @@ APE::Item::~Item()
Item &APE::Item::operator=(const Item &item)
{
delete d;
d = new ItemPrivate(*item.d);
if(&item != this) {
delete d;
d = new ItemPrivate(*item.d);
}
return *this;
}

View File

@ -72,10 +72,12 @@ ASF::Attribute::Attribute(const ASF::Attribute &other)
ASF::Attribute &ASF::Attribute::operator=(const ASF::Attribute &other)
{
if(d->deref())
delete d;
d = other.d;
d->ref();
if(&other != this) {
if(d->deref())
delete d;
d = other.d;
d->ref();
}
return *this;
}

View File

@ -54,11 +54,12 @@ MP4::CoverArt::CoverArt(const CoverArt &item) : d(item.d)
MP4::CoverArt &
MP4::CoverArt::operator=(const CoverArt &item)
{
if(d->deref()) {
delete d;
if(&item != this) {
if(d->deref())
delete d;
d = item.d;
d->ref();
}
d = item.d;
d->ref();
return *this;
}

View File

@ -64,11 +64,13 @@ MP4::Item::Item(const Item &item) : d(item.d)
MP4::Item &
MP4::Item::operator=(const Item &item)
{
if(d->deref()) {
delete d;
if(&item != this) {
if(d->deref()) {
delete d;
}
d = item.d;
d->ref();
}
d = item.d;
d->ref();
return *this;
}