diff --git a/src/lib/depend-inject.hpp b/src/lib/depend-inject.hpp index 78d586fdd..59def341c 100644 --- a/src/lib/depend-inject.hpp +++ b/src/lib/depend-inject.hpp @@ -286,8 +286,7 @@ namespace lib { ~Local() { restoreOriginalFactory (origInstance_, move(origFactory_)); - origFactory_ = Factory{}; - } // clear possibly leftover deleter + } explicit operator bool() const @@ -387,9 +386,9 @@ namespace lib { temporarilyInstallAlternateFactory (SRV*& stashInstance, Factory& stashFac, FUN&& newFac) { Lock guard; - stashFac = move(Depend::factory); //////////////////////////////////////TICKET #1059 : GCC-4.9 stubbornly picks the copy assignment + stashFac.transferDefinition (move (Depend::factory)); stashInstance = Depend::instance; - Depend::factory.defineCreator (forward(newFac)); //////////////////////////////////////TICKET #1059 : GCC-4.9 stubbornly picks the copy assignment + Depend::factory.defineCreator (forward(newFac)); Depend::instance = nullptr; } @@ -397,7 +396,7 @@ namespace lib { restoreOriginalFactory (SRV*& stashInstance, Factory&& stashFac) { Lock guard; - Depend::factory = move(stashFac); //////////////////////////////////////TICKET #1059 : GCC-4.9 stubbornly picks the copy assignment + Depend::factory.transferDefinition (move (stashFac)); Depend::instance = stashInstance; } diff --git a/src/lib/depend2.hpp b/src/lib/depend2.hpp index 1db17c5a7..b171ca4b4 100644 --- a/src/lib/depend2.hpp +++ b/src/lib/depend2.hpp @@ -186,6 +186,15 @@ namespace lib { deleter_ = std::forward (additionalAction); } + void + transferDefinition (DependencyFactory&& source) + { + creator_ = std::move (source.creator_); + deleter_ = std::move (source.deleter_); + source.creator_ = Creator(); + source.deleter_ = Deleter(); // clear possible leftover deleter + } + private: OBJ* buildAndManage() diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index e99841c6e..dcda9c6f1 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -27153,7 +27153,7 @@ - + @@ -27177,6 +27177,12 @@ + + + + + + @@ -27347,15 +27353,15 @@ - - + + - + @@ -27401,10 +27407,19 @@ + + + + + + + + - + + @@ -27697,7 +27712,7 @@ - + @@ -27834,12 +27849,23 @@ - - + + + + + + +

+ ...und man stattdessen explizit eine gefährliche Funktion  aufrufen muß +

+ + +
+
- + @@ -28100,8 +28126,8 @@ - - + + @@ -28110,12 +28136,49 @@ - - + + + + + + + + +

+ ...wenn man nämlicht Lumiera's Lösung nicht genau kennt, +

+

+ könnte sich das so lesen, als wäre Depend<X> ein Mixin, +

+

+ welches einer Klasse magisch eine Dependency als protected-Feld zugänglich macht. +

+

+ Und dann wäre es ziemlich pervasiv, sowas zum Freund zu erklären. +

+ + +
- + + + + + + +

+ DependencyFactory ist viel besser geeignet +

+ + +
+ +
+
+ +