gpt4 book ai didi

c++ - 如何删除一个 tcl 解释器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:26 27 4
gpt4 key购买 nike

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

Tcl_Interp *_tclInterp = Tcl_CreateInterp();

我已经在一个函数中初始化了这个解释器。我想最后在我初始化它的同一个函数中删除/取消设置解释器。这样当我做一个

Get("tcl"); 

调用我没有同一个口译员。

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

最佳答案

您必须在 Tcl 解释器上使用 C++ delete 运算符。Tcl 的实现是用 C 语言实现的(出于与这个问题无关的各种原因),所以您在与它交互时必须使用 C 习语。特别是,Tcl_CreateInterpTcl_DeleteInterp 配对;它们甚至记录在 same manual page 上. (Tcl 不保证当你用那个函数删除解释器时立即释放内存,因为它会等到堆栈上不再使用它,但是如果你在一个理智的点删除它那么你会很好。在内部,Tcl_DeleteInterp 最终会在解释器结构上调用 free(),这是正确的,因为解释器是通过 malloc().) 如果你想要 RAII 风格的内存管理,你必须将它包装在一个小类中(Boost scoped_ptr 几乎是完美的,除了你需要一个不同的析构函数)。

C++ 中要注意的另一件事是 Tcl 解释器严格是线程绑定(bind)的; Tcl 库在内部广泛使用线程本地数据以将全局锁的数量减少到最低限度(特别是,Tcl 没有任何 Python C 实现的奇怪的全局锁问题)。只能从创建它的同一线程访问或删除解释器。

关于c++ - 如何删除一个 tcl 解释器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10779399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com