From 353d2f0220fcca3bea2f478f32eb85238bb22452 Mon Sep 17 00:00:00 2001 From: Le Philousophe Date: Tue, 19 Oct 2021 08:17:18 +0200 Subject: [PATCH] DIRECTOR: Fix compilation with C++98 The default assignment constructor just copies data over and we could end up with _matte pointing twice to the same surface. It's now properly reseted. --- engines/director/sprite.cpp | 15 ++++++++++++++- engines/director/sprite.h | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp index f388d0cfdac..2b2149e3eba 100644 --- a/engines/director/sprite.cpp +++ b/engines/director/sprite.cpp @@ -71,7 +71,13 @@ Sprite::Sprite(Frame *frame) { _stretch = 0; } -Sprite::Sprite(const Sprite &sprite) { +Sprite& Sprite::operator=(const Sprite &sprite) { + if (this == &sprite) { + return *this; + } + + this->~Sprite(); + _frame = sprite._frame; _score = sprite._score; _movie = sprite._movie; @@ -108,6 +114,13 @@ Sprite::Sprite(const Sprite &sprite) { _volume = sprite._volume; _stretch = sprite._stretch; + + return *this; +} + +Sprite::Sprite(const Sprite &sprite) { + _matte = nullptr; + *this = sprite; } Sprite::~Sprite() { diff --git a/engines/director/sprite.h b/engines/director/sprite.h index dc3754f8542..dbc967545ec 100644 --- a/engines/director/sprite.h +++ b/engines/director/sprite.h @@ -61,7 +61,7 @@ class Sprite { public: Sprite(Frame *frame = nullptr); Sprite(const Sprite &sprite); - Sprite& operator=(const Sprite &sprite) = default; + Sprite& operator=(const Sprite &sprite); ~Sprite(); Frame *getFrame() const { return _frame; }