Nativer Typ in Managed Klasse
-
Abend,
so wie ich das sehe kann man ja keinen "value" nativen Typ in Managed C++/CLI Klassen haben, sondern nur Pointer.
Sprich:class ref Managed { NativerTyp t; // Das geht nicht NativerTyp* p; // Das schon };
Wie mache ich das nun, wenn ich eine native Funktion habe, die mir einen nativen nativen Smart Pointer liefert und ich den in der Managed Klasse halten will? Die native Funktion sieht so aus:
SmartPtr<Foo> constructObject();
Muss ich da jetzt einen Smart Pointer auf dem Heap anlegen?
class ref Managed { SmartPtr<Foo> t; // Das hätte ich gerne. Geht aber nicht? SmartPtr<Foo> *p; // Ich denke so würde es gehen. Gefällt mir aber nicht so void method() { p = new SmartPtr<Foo>; // Mir missfällt der Gedanke einen Smart Pointer auf dem Heap anzulegen! *p = constructObject(); // mit p was machen delete p; } };
Geht das auch anders? Wie kann ich in einer Managed Klasse den Rückgabewert von constructObject() am besten halten?
-
Ev. helfen diese beiden Beiträge weiter:
http://stackoverflow.com/questions/176403/autoptr-or-sharedptr-equivalent-in-managed-c-cli-classes
http://www.codeproject.com/KB/mcpp/CAutoNativePtr.aspxSimon
-
du kannst dir einen managed wrapper für den smart-pointer bauen.
wenn dieser managed-wrapper IDisposable implementiert, dann kannst du den auch so verwenden, als ob er native wäre.ref class MyWrapper : IDisposable { // ... }; ref class MyFoo : IDisposable { private: MyWrapper m_foo; // ohne "dacherl" -> automatische Dispose weiterleitung };
Wird schätze ich auch inetwa das sein, was in den beiden Links beschrieben ist.
-
Ein direktes impl. der IDisposable Schnittstelle führt zu einem Kompiler Fehler (AFAIK). Einfach ~ClassName() verwenden.
Simon
-
ups.
ja