C++ Move-Assignment
Verfasst: 09.08.2020, 12:46
Ich habe gerade einen Compilerfehler, der sich trivial anfühlt, aber ich komme gerade nicht auf die Lösung:
Ok, SoundController Objekte werden von SoundFiles (sound1, sound2) erzeugt, kein Problem. Bei der Neuzuweisung bekomme ich allerdings folgende Fehlermeldung:
Compiler ist VS 2015 (14.0.25431.01 Update 3).
Code: Alles auswählen
class SoundController
{
private:
SoundController(SoundFile& file, SoLoud::Soloud& engine, bool start_playing, bool play_3d); //only called by sound file
public:
SoundController() = delete;
SoundController(SoundController&) = delete;
SoundController& operator=(SoundController&) = delete;
SoundController(SoundController&&) = default;
SoundController& operator=(SoundController&&) = default;
~SoundController();
Code: Alles auswählen
SoundController controller =sound1.PlayControlled(false, true);
SoundController s = sound2.PlayControlled(false, true);
controller = std::move(s);
Das irritiert mich, denn std::move sollte eigentlich ein SoundController&& zurück geben und damit den move-assignment-operator (der auf default gesetzt ist) aufrufen. Direktes kopieren will ich vermeiden, da jeder Controller genau einen Sound managed und auch wieder freigibt. Wo liegt da jetzt der Fehler?error C2280: 'SoundController &SoundController::operator =(SoundController &)': attempting to reference a deleted function
Compiler ist VS 2015 (14.0.25431.01 Update 3).