所以我在 C# 對象中保存了一個 C++/CLI 對象。我在我的 C++/CLI 對象上調用 dispose,我在 C++/CLI 析構函數和終結器中都有一個斷點。我知道 .NET 應該為 CLI 對象自動生成一個 Dispose 并將析構函數放在那里,但我在析構函數中的斷點只是沒有被擊中。有人能解釋一下我的情況嗎,因為我找不到任何關于這種行為的文件。C#public void Dispose(){ foreach (var wrapper in m_items) { var disposable = wrapper.Data as IDisposable; if (disposable != null) { disposable.Dispose(); } }}C++/命令行界面public ref class ClassA: System::IDisposable {... ClassA::~ClassA() { // Clean up code } ClassA::!ClassA() { // Clean up code }}如果這個問題已經得到回答,我深表歉意,但我已經嘗試過,但在堆棧溢出時找不到它。
1 回答

小唯快跑啊
TA貢獻1863條經驗 獲得超2個贊
Ahhh 找到了原因,即使我在 Visual Studio 中關閉了優化,它也會自動將我的析構函數優化為我在析構函數中進行的第一個函數調用。
因此,即使斷點看起來有效,我也不得不在我的其他函數中放置一個斷點以獲取調用堆棧。(有趣的一點是調用堆棧直接從 Dispose(bool) 轉到我的函數并跳過了析構函數)
- 1 回答
- 0 關注
- 132 瀏覽
添加回答
舉報
0/150
提交
取消