回答
首先,Tcl的不與{
/}
定義塊。範圍由過程調用或名稱空間定義。其次,Tcl命令總是被定義爲具有對應於擁有它們的命名空間的生命週期;他們永遠不會將過程調用的作用域限定爲†。它們必須以某種方式手動處理;有兩種方法可以執行此手動處理:調用$xyz -delete
或rename $xyz ""
(或其他任何空字符串)。坦率地說,我更喜歡第一種方法。
但是,如果您確實希望將壽命與過程調用聯繫起來,那實際上很可能。它只是需要一些額外的代碼:
proc tieLifespan args {
upvar 1 "____lifespan handle" v
if {[info exists v]} {
trace remove variable v unset $v
set args [concat [lindex $v 1] $args]
}
set v [concat Tie-Garbage-Collect $args]
trace add variable v unset $v
}
proc Tie-Garbage-Collect {handles var dummy1 dummy2} {
upvar 1 $var v
foreach handle $handles {
# According to SWIG docs, this is how to do explicit destruction
$handle -delete
# Alternatively: rename $handle ""
}
}
那你會在要配合$xyz
的生活範圍使用這樣的:
tieLifespan $xyz
# You can register multiple objects at once too
就是這樣。當過程(或類似過程的實體,如果您使用Tcl 8.5或更高版本)退出時,綁定對象將被刪除。這取決於你決定這是你真正想要的;如果你以後再沒有處理,你可能應該使用搭配而不是。
†好,幾乎沒有;一些擴展會造成討厭的事情。因爲它不適用於 SWIG生成的代碼!
嗨Donal感謝您的專家建議。但我堅持一些東西,這真的讓我感到厭煩。其實我用SWIG來調用C++庫中的方法。我正在調用返回指針列表的C++方法。在這種情況下,swig會返回指向該列表的指針。我通過調用wrap.cxx中的list_at和list_size方法從該列表指針中提取所有元素。當我在提取那些我已經提取的指針的「cget -thisown」時,提取這些指針後,我得到0而不是1.所以請在此幫助我。 – 2011-06-12 18:24:28
- 1. swig + tcl + C++(內存管理)
- 2. 使用Swig結合使用C和TCL
- 3. 如何在SWIG中使用C++優化標誌?
- 4. SWIG C++ TCL:處理內存中已存在的對象
- 5. TCL tDom空XML標記
- 6. 使用SWIG將結構指針從TCL傳遞到C函數中
- 7. SWIG TCL:將類構造函數名稱從new_ *重命名爲create_ *
- 8. 如何將Boost :: shared_ptr <T>暴露給Tcl + SWIG接口文件?
- 9. 使用SWIG,將C數組指針取消引用到TCL變量
- 10. 使用Swig從C函數向TCL過程發送字符串列表
- 11. 在Tcl中從命令行參數中讀取標誌的機制
- 12. swig,從列表到非標準向量
- 13. 與SWIG
- 14. 大會 - 標誌標誌和奇偶校驗標誌
- 15. 使用CMake生成SWIG綁定
- 16. Golang標誌包有默認標誌嗎?
- 17. 在TCL中獲取控制檯變量的日誌
- 18. 如何使用tcl腳本創建日誌文件
- 19. SWIG C#到Python
- 20. Node.JS Consolidate和Swig
- 21. Cygwin,SWIG和Python
- 22. SWIG跨平臺
- 23. TTY,SWIG和PHP
- 24. 帶swig的auto_ptr
- 25. Python SWIG數組
- 26. swig jni問題
- 27. 使用SWIG創建一個面向對象的API使用SWIG
- 28. $ jquery的標誌
- 29. 爲標誌列
- 30. arc4random標誌
TCL沒有您認爲它的語法,您可能想嘗試閱讀TCL語法 – 2011-06-12 11:09:05