2010-08-26 7 views
0

J'ai un projet C# dans lequel la classe C++ gérée est utilisée. Cette classe C++ gérée encapsule un code C++ non géré.Destructeur non appelé lors du débogage dans VS 2010

J'ai un bloc de code comme celui-ci; J'ai placé une chaîne de sortie simple à destructor de classe.

Si je lance un programme à partir de Visual Studio, le destructeur de foo n'est pas appelé. Mais si je lance un programme en double-cliquant dessus (c'est une application console), destructor est appelé immédiatement.

Pourquoi il se comporte ainsi?

Un grand merci, Cordialement

+0

dupliquer à partir de http://stackoverflow.com/questions/755680/gc-collect-doesnt-seem-to-work-in-debug-mode ? – nob

Répondre

1

Je peux me tromper, mais ne sont pas destructeurs C++ mis en correspondance IDisposable.Dispose en C++/CLI? Si oui, vous devez appeler Dispose ou plutôt l'envelopper dans un bloc à l'aide, tout comme avec tout autre IDisposable:

using (ManagedFoo foo = new ManagedFoo()) { 
    /// Use foo in here 
} 

La question liée par Nob explique pourquoi le comportement peut être différent entre le débogage et en cours d'exécution directement. Je parie que le destructeur est appelé dans le finaliseur, si vous ne l'appelez pas explicitement.

Questions connexes