回答
首先,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