Unique_ptr aus der verwalteten Klasse resetten
-
Hi,
ist folgendes legal?
#include <memory> #include <iostream> #include <deque> class Mode { public: static std::unique_ptr<Mode> current; virtual void doSomething() = 0; }; class B : public Mode { public: void doSomething() { std::cout << "Mode B " << std::endl; } }; class A : public Mode { private: std::deque<char> chars; public: A() : chars{'a', 'b', 'c'} {} void doSomething() { if(chars.empty() ) { Mode::current.reset(new B); return; } chars.pop_front(); } }; std::unique_ptr<Mode> Mode::current(new A); int main() { for(unsigned i = 0; i < 5; ++i) Mode::current->doSomething(); std::cout << "Done" << std::endl; }
-
AFAIK ist das in Ordnung solange nach dem delete (reset) keine Member Variablen mehr "angefasst" werden. Ich würde das ähnlich sehen wie delete this.
-
Du hast nen virtuellen Destruktor in Mode vergessen! Abgesehen davon, ist das alles i.O.
-
krümelkacker schrieb:
Du hast nen virtuellen Destruktor in Mode vergessen! Abgesehen davon, ist das alles i.O.
Stimmt, danke.
