我在c ++中有一个应用程序,我正在使用tcl解释器.我已经为我的应用程序创建了一个tcl解释器
Tcl_Interp *_tclInterp = Tcl_CreateInterp();
Run Code Online (Sandbox Code Playgroud)
我在一个函数中初始化了这个解释器.我想在我初始化它的同一个函数里面删除/取消设置解释器.所以,当我做一个
Get("tcl"); 
Run Code Online (Sandbox Code Playgroud)
打电话我不会得到同样的翻译.
所以我的问题是如何删除/取消设置tcl解释器.
您不能delete在Tcl解释器上使用C++ 运算符.Tcl的实现是在C中(由于各种原因与这个问题无关)所以你必须在与它交互时使用C语言.特别Tcl_CreateInterp是与...配对Tcl_DeleteInterp; 它们甚至记录在同一个手册页上.(当你用该函数删除解释器时,Tcl不保证立即释放内存,因为它等待它不再在堆栈中使用它,但是如果你在一个理智的点上删除它,那么你将会好吧.在内部,Tcl_DeleteInterp最终会调用free()解释器结构,这是正确的,因为解释器是通过分配的malloc().)如果你想要RAII风格的内存管理,你必须将它包装在一个小类中(Boost scoped_ptr几乎是完美,除了你需要一个不同的析构函数).
从C++中要注意的另一件事是Tcl解释器是严格的线程绑定; Tcl库在内部广泛使用线程本地数据,以将全局锁的数量减少到最低限度(特别是,Tcl没有Python的C实现的任何奇怪的全局锁定问题).只能从创建它的同一个线程中访问或删除解释器.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           504 次  |  
        
|   最近记录:  |