Chain-Load: verify (and bugfix)

This commit is contained in:
Fischlurch 2023-11-25 19:22:10 +01:00
parent ed8d9939bd
commit 659441fa88
3 changed files with 234 additions and 31 deletions

View file

@ -260,8 +260,10 @@ namespace lib {
template<class SIG, class INI, typename...ARGS>
LazyInit (std::function<SIG>& targetFunctor, INI&& initialiser, ARGS&& ...parentCtorArgs)
: PAR(forward<ARGS> (parentCtorArgs)...)
, pendingInit_{prepareInitialiser (targetFunctor, forward<INI> (initialiser))}
{ }
, pendingInit_{}
{
installInitialiser (targetFunctor, forward<INI> (initialiser));
}
LazyInit (LazyInit const& ref)

View file

@ -340,13 +340,22 @@ namespace test{
{
return [theFun = forward<FUN> (fun2install)]
(LazyDemo* self)
{
{ // this runs when init is actually performed....
CHECK (self);
self->fun = [self, chain = move(theFun)]
(int i)
{
return chain (i + self->seed); // Note: binding to actual instance location
};
if (self->fun)
// chain-up behind existing function
self->fun = [self, prevFun = move(self->fun), nextFun = move(theFun)]
(int i)
{
return nextFun (prevFun (i));
};
else
// build new function chain, inject seed from object
self->fun = [self, newFun = move(theFun)]
(int i)
{
return newFun (i + self->seed); // Note: binding to actual instance location
};
};
}
@ -359,12 +368,20 @@ namespace test{
}
template<typename FUN>
LazyDemo(FUN&& someFun)
LazyDemo (FUN&& someFun)
: LazyInit{MarkDisabled()}
, fun{}
{
installInitialiser(fun, buildInit (forward<FUN> (someFun)));
}
template<typename FUN>
LazyDemo&&
attach (FUN&& someFun)
{
installInitialiser(fun, buildInit (forward<FUN> (someFun)));
return move(*this);
}
};
/**
@ -373,7 +390,9 @@ namespace test{
* - the initialisation routine _adapts_ this function and links it with the current
* object location; thus, invoking this function on a copy would crash / corrupt memory.
* - however, as long as initialisation has not been triggered, LazyDemo instances can be
* copied; they may even be assigned to existing instances, overwriting their state.
* copied; they may even be assigned to existing instances, overwriting their state.
* - a second given function will be chained behind the first one; this happens immediately
* if the first function was already invoked (and this initialised)
*/
void
verify_complexUsageWithCopy()
@ -404,6 +423,21 @@ namespace test{
CHECK (26 == d1.fun(22)); // seed value is picked up dynamically
VERIFY_ERROR (LIFECYCLE, LazyDemo dx{move(d1)} );
// attach a further function, to be chained-up
d1.attach([](int i)
{
return i / 2;
});
CHECK (d1.isInit());
CHECK (d1.seed == 3);
CHECK (12 == d1.fun(21)); // 21+3+1=25 / 2
CHECK (13 == d1.fun(22));
CHECK (13 == d1.fun(23));
d1.seed++;
CHECK (14 == d1.fun(23)); // 23+4+1=28 / 2
CHECK (14 == d1.fun(24));
CHECK (15 == d1.fun(25));
}
};

View file

@ -97365,6 +97365,147 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1700878177787" ID="ID_707719092" MODIFIED="1700878185308" TEXT="engaged / reject copy">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700930546516" ID="ID_1564171170" MODIFIED="1700930756771" TEXT="chained / repeated init">
<linktarget COLOR="#d33070" DESTINATION="ID_1564171170" ENDARROW="Default" ENDINCLINATION="-852;94;" ID="Arrow_ID_474620988" SOURCE="ID_582127020" STARTARROW="None" STARTINCLINATION="353;26;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1700930691509" ID="ID_1932503456" MODIFIED="1700930701095" TEXT="nach Erweiterung auf chained-Init"/>
<node COLOR="#338800" CREATED="1700930772985" ID="ID_437187802" MODIFIED="1700936377561" TEXT="Fall-1 schrittweise &#x27f9; 2.Funktion wird direkt angewendet">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1700930810316" ID="ID_1951631206" MODIFIED="1700934641597" TEXT="SEGFAULT">
<icon BUILTIN="broken-line"/>
<node CREATED="1700930968706" ID="ID_112881994" MODIFIED="1700936360706" TEXT="vorheriger Testfall: verify_lazyInitialisation">
<icon BUILTIN="forward"/>
<node CREATED="1700931144507" ID="ID_1402058956" MODIFIED="1700931493280" TEXT="der testet (nur) die Basis-Funktionalit&#xe4;t..."/>
<node CREATED="1700932365874" ID="ID_1980358043" MODIFIED="1700932380251" TEXT="versuche noch einzugrenzen">
<node CREATED="1700932383903" ID="ID_1672931837" MODIFIED="1700932392548" TEXT="das Verhalten ist probabilistisch"/>
<node CREATED="1700932393247" ID="ID_1817539105" MODIFIED="1700932400889" TEXT="mit dem Debugger nicht reproduzierbar"/>
<node CREATED="1700932402518" ID="ID_895380648" MODIFIED="1700932452565" TEXT="wenn man die letzten beiden Zeilen auskommentiert &#x27f6; Fehler verschwindet">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CHECK (1 == invoked);
</p>
<p>
//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CHECK (init);
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1700932454870" ID="ID_1214658102" MODIFIED="1700932500906" TEXT="nur die letzte Zeile auskommetiert &#x27f6; bad_function_call expcption (manchmal SEGFAULT)"/>
</node>
<node CREATED="1700932559871" ID="ID_291091970" MODIFIED="1700932592585">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
die neue <b><font color="#b80202">maybeInvoke</font></b>()
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="forward"/>
<node COLOR="#82294c" CREATED="1700932694758" ID="ID_1897631554" MODIFIED="1700932717669" TEXT="return (*pendingDelegate) (location); // invoke to create new TargetFun">
<font NAME="Monospaced" SIZE="12"/>
<node CREATED="1700933021282" ID="ID_259468971" MODIFIED="1700933052441" TEXT="diese Zeile d&#xfc;rfte im Beispiel gar nicht laufen"/>
<node CREATED="1700933053519" ID="ID_531104855" MODIFIED="1700933065606" TEXT="denn das ist die erste Initialisierung eines neuen Objekts"/>
<node CREATED="1700933303016" ID="ID_202001537" MODIFIED="1700933307535" TEXT="Debugger">
<node CREATED="1700933309785" ID="ID_793336245" MODIFIED="1700933321021" TEXT="im delegate-&#x3bb;"/>
<node CREATED="1700933322337" ID="ID_1721922743" MODIFIED="1700933339191" TEXT="capture previousInit">
<node CREATED="1700933340351" ID="ID_455359128" MODIFIED="1700933402320" TEXT="ist korrupt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
previousInit
</p>
<p>
Details:&lt;error reading variable: Cannot access memory at address 0x3000000030&gt;
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1700933404336" ID="ID_606348307" MODIFIED="1700933415215" TEXT="get() zeigt auf eine Stack-Addresse (sollte Heap sein)"/>
</node>
</node>
</node>
<node CREATED="1700932731640" ID="ID_360832756" MODIFIED="1700932762749" TEXT="&#x27f9; Problem steckt im erweiterten Memory-Management f&#xfc;r chained-initialiser"/>
<node BACKGROUND_COLOR="#d5bb9b" COLOR="#fa002a" CREATED="1700932787977" ID="ID_1177559316" MODIFIED="1700934162408" TEXT="gedankenloser Schmuh : move (pendingInit_) .....">
<icon BUILTIN="smiley-oh"/>
<node CREATED="1700933651909" ID="ID_1160983607" MODIFIED="1700933990550" TEXT="was passiert bei move(shared_ptr)??">
<arrowlink COLOR="#f01130" DESTINATION="ID_1523180887" ENDARROW="Default" ENDINCLINATION="-71;-11;" ID="Arrow_ID_1745949442" STARTARROW="None" STARTINCLINATION="155;12;"/>
<node CREATED="1700934828648" ID="ID_831687284" MODIFIED="1700934902699" TEXT="nebenbei: im Code angeschaut">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;__shared_ptr(__shared_ptr&amp;&amp; __r) noexcept
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;: _M_ptr(__r._M_ptr), _M_refcount()
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;{
</p>
<p>
_M_refcount._M_swap(__r._M_refcount);
</p>
<p>
__r._M_ptr = 0;
</p>
<p>
&#160;&#160;&#160;&#160;&#160;&#160;}
</p>
</body>
</html>
</richcontent>
<node CREATED="1700934837739" ID="ID_777504264" MODIFIED="1700934845312" TEXT="ganz sauber: konstruiert ein neues Objekt"/>
<node CREATED="1700934846062" ID="ID_1249336482" MODIFIED="1700934855657" TEXT="mit einem leeren Refcount-Subobjekt"/>
<node CREATED="1700934856341" ID="ID_1904206411" MODIFIED="1700934867263" TEXT="und macht dann ein Swap mit dem Original-Refcount"/>
<node CREATED="1700934881929" ID="ID_845376746" MODIFIED="1700934896555" TEXT="und setzt dann als Letztes beim Original den ptr auf NULL"/>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1700933862105" ID="ID_728350277" MODIFIED="1700934371231" TEXT="viel einfacher: wir sind hier im call-Stack vom Konstruktor">
<arrowlink COLOR="#94385e" DESTINATION="ID_988517206" ENDARROW="Default" ENDINCLINATION="530;-26;" ID="Arrow_ID_622219569" STARTARROW="None" STARTINCLINATION="-527;27;"/>
<icon BUILTIN="idea"/>
<node CREATED="1700933903857" ID="ID_214804080" MODIFIED="1700933915431" TEXT="pendingInit_ ist noch garnicht konstruiert/initialisiert"/>
<node CREATED="1700933916130" ID="ID_367591800" MODIFIED="1700933928260" TEXT="und diesen Zusand moven wir in das &#x3bb;"/>
<node CREATED="1700933953449" ID="ID_1523180887" MODIFIED="1700933986403" TEXT="works as designed">
<linktarget COLOR="#f01130" DESTINATION="ID_1523180887" ENDARROW="Default" ENDINCLINATION="-71;-11;" ID="Arrow_ID_1745949442" SOURCE="ID_1160983607" STARTARROW="None" STARTINCLINATION="155;12;"/>
<icon BUILTIN="smiley-oh"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1700933934838" ID="ID_1439685001" MODIFIED="1700934189582" TEXT="Party!"/>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1700934610437" ID="ID_859515833" MODIFIED="1700934638430" TEXT="ein ganz banaler Programmierfehler">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
... kein Problem mit der Logik
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
@ -97445,7 +97586,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1700795177255" ID="ID_1289910748" MODIFIED="1700856355486" TEXT="an beliebige Kopierbarkeit denken">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1700856368367" ID="ID_10148288" MODIFIED="1700856381041" TEXT="es spricht nichts dagegen, den Initialiser mehrfach anzuwenden"/>
<node CREATED="1700856368367" ID="ID_10148288" MODIFIED="1700934263557" TEXT="es spricht nichts dagegen, den Initialiser mehrfach anzuwenden"/>
<node CREATED="1700856381773" ID="ID_1768653625" MODIFIED="1700856395423" TEXT="genau deshalb bekommt er ja *self als Argument"/>
</node>
<node COLOR="#338800" CREATED="1700795186661" ID="ID_1743434660" MODIFIED="1700856347710" TEXT="der schleppt dann wohl leider einen shared_ptr mit rum">
@ -97525,6 +97666,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1700865829132" ID="ID_1420005046" MODIFIED="1700865850429" TEXT="shared_ptr nach Triggern der Initialisierung reset()">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1700930608396" ID="ID_1911462720" MODIFIED="1700930636539" TEXT="alten shared_ptr f&#xfc;r Verkettung jeweils in das Delegate verschieben">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1700865861639" ID="ID_409549839" MODIFIED="1700865919942" TEXT="gegebenes Init-&#x3bb; adaptieren">
<icon BUILTIN="button_ok"/>
@ -97550,9 +97694,6 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#338800" CREATED="1700871143583" ID="ID_1088454070" MODIFIED="1700878102782" TEXT="mu&#xdf; dann aber eine Setter-Funktion public machen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1700876522892" ID="ID_199433026" MODIFIED="1700878099429" TEXT="brauche dann auch einen Leer-Init-Zustand">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1700878072770" ID="ID_1728628936" MODIFIED="1700878084969" TEXT="Prolbem: ctor-Signatur zweideutig">
@ -97562,6 +97703,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
</node>
<node COLOR="#338800" CREATED="1700871143583" ID="ID_1088454070" MODIFIED="1700934358632" TEXT="mu&#xdf; dann aber eine Setter-Funktion public machen">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700934235151" ID="ID_988517206" MODIFIED="1700934456372" TEXT="Installieren des Initialisers nun stets &#xfc;ber den Setter">
<linktarget COLOR="#94385e" DESTINATION="ID_988517206" ENDARROW="Default" ENDINCLINATION="530;-26;" ID="Arrow_ID_622219569" SOURCE="ID_728350277" STARTARROW="None" STARTINCLINATION="-527;27;"/>
<linktarget COLOR="#feccb9" DESTINATION="ID_988517206" ENDARROW="Default" ENDINCLINATION="-537;28;" ID="Arrow_ID_703877314" SOURCE="ID_1994110111" STARTARROW="None" STARTINCLINATION="-214;-11;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1700934478543" ID="ID_1596192488" MODIFIED="1700934519682" TEXT="elaborierte Init-Logik direkt aus der ctor-initialiser-List ist sowiso keine gute Idee">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1700934521513" ID="ID_1817606797" MODIFIED="1700934538113" TEXT="und die default-Init eines shared_ptr ist extrem leichtgewichtig"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1700871279919" ID="ID_1126055663" MODIFIED="1700871683297">
<richcontent TYPE="NODE"><html>
<head>
@ -97639,9 +97792,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700883451009" ID="ID_1957619208" MODIFIED="1700883468235" TEXT="Analyse: wiederholte / kaskadierte Initialisierungen">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1700883475839" ID="ID_837624106" MODIFIED="1700883477453" TEXT="Ablauf">
<node COLOR="#338800" CREATED="1700883451009" ID="ID_1957619208" MODIFIED="1700930513797" TEXT="Analyse: wiederholte / kaskadierte Initialisierungen">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1700883475839" ID="ID_837624106" MODIFIED="1700930507747" TEXT="Ablauf">
<icon BUILTIN="info"/>
<node CREATED="1700883822501" ID="ID_402007618" MODIFIED="1700883824872" TEXT="Fall-1">
<node CREATED="1700883478738" ID="ID_1745053013" MODIFIED="1700883862198" TEXT="isInit() &#x27fc; true(leer) + kein Funktor"/>
<node CREATED="1700883537958" ID="ID_1244902831" MODIFIED="1700883549760" TEXT="isInit() &#x27fc; false + Trap"/>
@ -97659,7 +97813,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1700883563354" ID="ID_536028687" MODIFIED="1700883580135" TEXT="Trap &#x27f6; neuer Funktor"/>
</node>
</node>
<node CREATED="1700883981242" ID="ID_476427708" MODIFIED="1700883983854" TEXT="Fall-Muster">
<node COLOR="#435e98" CREATED="1700883981242" ID="ID_476427708" MODIFIED="1700930508721" TEXT="Fall-Muster">
<icon BUILTIN="forward"/>
<node CREATED="1700883997648" ID="ID_279106916" MODIFIED="1700884041366" TEXT="not pendingInit + kein Funktor &#x27f9; Fall-1"/>
<node CREATED="1700884059833" ID="ID_1932722762" MODIFIED="1700884071728" TEXT="not pendingInit + Funktor &#x27f9; Fall-2">
<node CREATED="1700884197594" ID="ID_1851874040" MODIFIED="1700884208296" TEXT="dieser Funktor w&#xe4;re ein Vorl&#xe4;ufer"/>
@ -97669,13 +97824,14 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1700884114752" ID="ID_364127230" MODIFIED="1700884129803" TEXT="pendingInit + kein Funktor &#x27f9; LogicBroken"/>
</node>
<node CREATED="1700884471281" ID="ID_944993217" MODIFIED="1700884475692" TEXT="L&#xf6;sung...">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700884476470" ID="ID_1258681625" MODIFIED="1700884494881" TEXT="minimal: sollte gemacht werden">
<node COLOR="#338800" CREATED="1700884471281" ID="ID_944993217" MODIFIED="1700930497292" TEXT="L&#xf6;sung...">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1700884476470" ID="ID_1258681625" MODIFIED="1700930485802" TEXT="minimal: sollte gemacht werden">
<icon BUILTIN="yes"/>
<node CREATED="1700884496384" ID="ID_169506932" MODIFIED="1700884505209" TEXT="vor Aufruf des Initialisers..."/>
<node CREATED="1700884506445" ID="ID_14177401" MODIFIED="1700884522694" TEXT="den bestehenden Functor leer machen"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1700884537072" ID="ID_1176504809" MODIFIED="1700925243615" TEXT="erweitert: machbar?">
<node COLOR="#435e98" CREATED="1700884537072" ID="ID_1176504809" MODIFIED="1700930488084" TEXT="erweitert: machbar?">
<icon BUILTIN="help"/>
<node CREATED="1700884615478" ID="ID_1008762319" MODIFIED="1700884620881" TEXT="Init-Verkettung">
<node CREATED="1700884634923" ID="ID_1100836382" MODIFIED="1700884788061" TEXT="bestehenden pendingInit zuerst aufrufen">
@ -97697,11 +97853,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1700884841856" ID="ID_1654607159" MODIFIED="1700884865645" TEXT="das Objekt ist &#xbb;engaged&#xab;, d.h. darf nicht mehr bewegt werden"/>
<node CREATED="1700884866732" ID="ID_1005926094" MODIFIED="1700884910994" TEXT="unter diesen Umst&#xe4;nden ist gar keine lazy-Init notwendig"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700885072177" ID="ID_1660971679" MODIFIED="1700885098097" TEXT="Antwort: ist ohne gro&#xdf;en Aufwand machbar">
<node COLOR="#435e98" CREATED="1700885072177" ID="ID_1660971679" MODIFIED="1700930490340" TEXT="Antwort: ist ohne gro&#xdf;en Aufwand machbar">
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1700885100085" ID="ID_1294902012" MODIFIED="1700928226538" TEXT="operational">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1700885100085" ID="ID_1294902012" MODIFIED="1700930494083" TEXT="operational">
<icon BUILTIN="list"/>
<node CREATED="1700885105797" ID="ID_392736313" MODIFIED="1700885117623" TEXT="beim Aufruf zum Installieren...">
<node CREATED="1700885126594" ID="ID_933835878" MODIFIED="1700885357053" TEXT="zuerst den Fall feststellen">
@ -97723,13 +97879,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1700885399157" ID="ID_1052362467" MODIFIED="1700928254133" TEXT="Erg&#xe4;nzung der Init-Routine">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700885425170" ID="ID_1390543220" MODIFIED="1700885449554" TEXT="Logik zur Fall-Erkennung">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1700885399157" ID="ID_1052362467" MODIFIED="1700930526102" TEXT="Erg&#xe4;nzung der Init-Routine">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1700885425170" ID="ID_1390543220" MODIFIED="1700930515720" TEXT="Logik zur Fall-Erkennung">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700885455310" ID="ID_75201701" MODIFIED="1700885475092" TEXT="zus&#xe4;tzlich einen shared_ptr innerhalb vom Adapter vorsehen">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1700885455310" ID="ID_75201701" MODIFIED="1700930517963" TEXT="zus&#xe4;tzlich einen shared_ptr innerhalb vom Adapter vorsehen">
<icon BUILTIN="button_ok"/>
<node CREATED="1700885486066" ID="ID_1745928936" MODIFIED="1700885498658">
<richcontent TYPE="NODE"><html>
<head>
@ -97784,9 +97940,20 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1700885870078" ID="ID_1085520028" MODIFIED="1700885900667" TEXT="wenn es einen pendingInit gibt (&#x27f9;Fall-3) dann verschieben">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1700885870078" ID="ID_1085520028" MODIFIED="1700930525033" TEXT="wenn es einen pendingInit gibt (&#x27f9;Fall-3) dann verschieben">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1700934390451" ID="ID_580868191" MODIFIED="1700934405730" TEXT="Vorraussetzung: der shared_ptr mu&#xdf; immer initialisiert sein">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1700934411512" ID="ID_1994110111" MODIFIED="1700934468459" TEXT="ist er aber nicht wenn wir aus dem Konstruktor aufrufen">
<arrowlink COLOR="#feccb9" DESTINATION="ID_988517206" ENDARROW="Default" ENDINCLINATION="-537;28;" ID="Arrow_ID_703877314" STARTARROW="None" STARTINCLINATION="-214;-11;"/>
<icon BUILTIN="smiley-oh"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1700930708239" ID="ID_582127020" MODIFIED="1700930761845" TEXT="Test: verify_complexUsageWithCopy">
<arrowlink COLOR="#d33070" DESTINATION="ID_1564171170" ENDARROW="Default" ENDINCLINATION="-852;94;" ID="Arrow_ID_474620988" STARTARROW="None" STARTINCLINATION="353;26;"/>
<icon BUILTIN="pencil"/>
</node>
</node>
</node>