如何删除tcl解释器?

Apo*_*hay 4 c++ tcl

我在c ++中有一个应用程序,我正在使用tcl解释器.我已经为我的应用程序创建了一个tcl解释器

Tcl_Interp *_tclInterp = Tcl_CreateInterp();
Run Code Online (Sandbox Code Playgroud)

我在一个函数中初始化了这个解释器.我想在我初始化它的同一个函数里面删除/取消设置解释器.所以,当我做一个

Get("tcl"); 
Run Code Online (Sandbox Code Playgroud)

打电话我不会得到同样的翻译.

所以我的问题是如何删除/取消设置tcl解释器.

Don*_*ows 6

不能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实现的任何奇怪的全局锁定问题).只能从创建它的同一个线程中访问或删除解释器.