我有一個使用libxml2的類。它具有靜態成員,用於保存架構文件及其解析器的上下文。我正在使用valgrind,並且它抱怨說內存不會與模式上下文一起釋放。這是因爲你需要自己釋放內存。但是,由於這些上下文變量是靜態的,我不能釋放對象的銷燬。有沒有辦法調用必要的免費函數,或者我應該忽略valgrind。有沒有辦法在進程結束時對靜態成員做些什麼?
回答
在您的XML使用類中聲明另一個類。在它的析構函數中,清理你的靜態成員。現在給外部類另外一個內部類類型的靜態成員。由於有一個非平凡的析構函數,它會在程序退出時被清理乾淨,因此你的其他值也會被清除。
class UseLibXml {
static int xmlvar;
struct StaticCleanup {
~StaticCleanup() {
CleanUpLibXmlVar(UseLibXml::xmlvar);
}
};
static StaticCleanup static_cleanup;
};
定義您的.cpp文件中的一個UseLibXml::static_cleanup
您定義的其他靜態變量一樣的地方。
設置一個atexit
處理程序並在那裏釋放。或者忽略。
如果valgrind錯誤在進程結束時顯示,那麼我不會擔心它。爲什麼上下文變量是靜態的?
您可以生成一個抑制文件,使valgrind忽略與靜態上下文相關的錯誤。請參閱valgrind手冊中的此頁面:suppressing errors
基本上,類是「讀者」有且只有一個程序有效模式。因此,按需閱讀模式並創建解析上下文,但隨後創建的其他讀者不必再次打開該文件。 – Dave 2009-12-17 14:11:19
我想你可以忽略這個警告,因爲它們不是內存泄漏。他們佔用的內存將盡快返回到操作系統退出
也就是說,如果應用程序退出。卸載庫並重新加載時會發生什麼? – 2009-12-17 10:54:50
我假設這些靜態變量是指針?
假設你有:
class X
{
private:
static Plop* staicXData; // Initialised in the code.
};
我將其更改爲:
Class X
{
private:
static Plop& getStatoc()
{
static Plop data; // Auto created on first use.
// Destroyed on program exit.
return data;
}
};
- 1. for循環結束時做些什麼
- 2. 在類中使用靜態成員對象有什麼問題?
- 3. 爲什麼靜態類只能有靜態成員?
- 4. 有沒有什麼辦法在靜態方法中檢測目標類?
- 5. 有沒有辦法在GNU OpenMP中結束空閒線程?
- 6. 擁有90%靜態成員的Java類。好的做法還是什麼?
- 7. 有沒有辦法知道ExecutorService是否成功結束?
- 8. 爲什麼接口不能有靜態成員方法
- 9. 在ActionScript3中運行時,有沒有辦法從類中獲取所有靜態成員的名單
- 10. 在課程結束時聲明私人成員有什麼優勢?
- 11. 有沒有什麼辦法趕上longclick離開或結束事件在android
- 12. ,有沒有辦法在運行時確定類的成員?
- 13. 無法對非靜態類成員進行靜態引用
- 14. 有沒有什麼辦法讓PromiseList的結果超時
- 15. 爲什麼只有Java中的靜態內部類具有靜態成員?
- 16. 類有什麼功能有自己的靜態成員?
- 17. 爲什麼我的線程在我中斷時沒有結束?
- 18. 有沒有什麼辦法可以配置jboss在線程執行結束時清除ThreadLocal變量?
- 19. 擁有靜態成員的課程
- 20. C#=爲什麼Excel進程沒有結束?
- 21. 有沒有辦法在暫停狀態下啓動進程?
- 22. 當Perl線程完成其工作時,有什麼辦法可以做些什麼嗎?
- 23. PHP的靜態成員和實例成員似乎沒有什麼不同。爲什麼PHP這樣做(沒有警告)?
- 24. 這些私有靜態成員是否線程安全?
- 25. 有沒有辦法在cuBLAS中做「saypx」?
- 26. 是有辦法追加的eTag在靜態資源在Django結束
- 27. iPhone:有沒有辦法在視頻結束之前退出MPMoviePlayerController?
- 28. 有沒有辦法在AnimatedVectorDrawables中偵聽動畫結束
- 29. 有沒有辦法找出方法是靜態的還是非靜態的?
- 30. Python多進程 - 爲什麼我的進程沒有返回/結束?
您有'StaticCleanup'定義爲'struct'而不是'class'嗎? – Dave 2009-12-16 22:10:15
通過使它成爲一個結構體,我不必顯式地將析構函數公開。公共與私有是結構與類之間唯一的區別。 – 2009-12-16 23:06:44
實現了這一點,它的工作原理。謝謝! – Dave 2009-12-17 15:10:09