Hallo,
wenn ich diesen Thread so lese, denke ich der Umgang mit
VCL-Objekten ist im C++ Builder in diesem Sinne einfacher geregelt. Da ist z.B. sowas üblich
Code:
void __fastcall TfrmMain::btnTestClick(TObject *Sender)
{
scoped_ptr<TStringList> list(new TStringList);
list->Add(L"Eins");
list->Add(L"Zwei");
list->Add(L"Drei");
}
Wenn die Funktion verlassen wird, auch über eine
Exception, löscht der Smartpointer die Stringlist.
Meine Überlegung war auch, dass Neulinge der
OOP intuitiv davon ausgehen, dass solche Referenzen NIL werden. Das Objekt ist ja halt "weg".
Natürlich ist es möglich (das war mir auch damals klar), die Referenzen extra zu verwalten und Referenzen explizit zu nilen. Ich hätte mir jedoch eine Compilerlösung gewünscht, die das automatisch regelt.
Das wäre dann ein Fall für shared_ptr und weak_ptr, erstere sind referenzzählend, letztere werden ungültig, wenn kein shared_ptr mehr auf "ihr" Objekt zeigt.
Das Anlegen sähe, wenn der Compiler schon C++11 könnte, dann so aus:
Code:
auto liste = make_shared(new TStringList);
(Das auto ermittelt den Typ der Variable entsprechend dem Ausdruck auf der rechten Seite der Zuweisung.)