Gmp Library Wrapper Speicherprobleme
-
Hallo zusammen,
ich habe eine kleinen Wrapper für die GMP geschrieben. Der Wrapper basiert auf einer Windows-Portierung der GMP von hier: http://fp.gladman.plus.com/computing/gmp4win.htmIch habe die Sourcen mit VS2005 kompiliert und eine Lib-Datei erzeugt. Lib-Datei und eine Gmp-Header Datei verwende ich in einem Managed C++ Projekt. Dort habe ich eine Klasse GmpBigInteger erstellt, die wie folgt aussieht:
public reg class GmpBigInteger{ private: mpz_class* c; public: GmpBigInteger(){c = new mpz_class();} ~GmpBigInteger(){delete c;} };
mpz_class ist dabei eine Struktur aus der Gmp Header-Datei.
Das funktioniert soweit auch alles sehr gut und man kann wunderbar schnell damit rechnen, nur leider wird der Speicher allem Anschein nach nicht freigegeben.
Der Destruktorauruf erfolgt zwar, hat aber keine Auswirkung.Zuerst dachte ich, es wäre ein Problem der Gmp aber ich kann das Verhalten mit nicht-Gmp Code genau so erzeugen:
public reg class MyClass{ private: char* s; public: MyClass(){s = new char[1024*1024];} ~MyClass(){delete s;} };
Das Beispiel ist zwar sinnfrei, aber der code wird genauso wenig freigeben wie oben.
Kennt jemand das Problem?Danke
rijn
-
Der Speicher wird nicht freigegeben, da .NET kein "delete" kennt.
Du musst das "IDispose"-Pattern in C# / C++/CLI verwenden bzw. den Finalizer aufrufen.Siehe Doku zu "~" und "!" in C++/CLI (Finalizer und Dispose-Pattern).