Tcl中的SWIG包裹对象;在退出时未调用析构函数

Tcl中的SWIG包裹对象;在退出时未调用析构函数,tcl,swig,Tcl,Swig,我有以下情况: SWIG包装类A(包含一个std::线程,该线程在销毁时加入,并运行自己的Tcl解释器) Tcl解释器提示% % A a % a -delete % exit 上面的方法很好用。GDB报告由对象A拥有的A生成的线程已停止 % A a % exit 以上结果导致底层C++类的析构函数未被调用,线程继续运行,并在程序退出时(在仍在运行的线程中突然中断),这是对其突然丢失的充分准备。这很好,也很漂亮,因为这是程序退出,但这并没有让我对为什么不调用析构函数感到不安 SWIG中是否有某

我有以下情况:

SWIG包装类
A
(包含一个std::线程,该线程在销毁时加入,并运行自己的Tcl解释器) Tcl解释器提示
%

% A a
% a -delete
% exit
上面的方法很好用。GDB报告由对象
A
拥有的
A
生成的线程已停止

% A a
% exit

以上结果导致底层C++类的析构函数未被调用,线程继续运行,并在程序退出时(在仍在运行的线程中突然中断),这是对其突然丢失的充分准备。这很好,也很漂亮,因为这是程序退出,但这并没有让我对为什么不调用析构函数感到不安

SWIG中是否有某种设置,我可以用它来告诉它自己清理干净


(故意不加C++,因为这个问题不是关于C++的)…< /P> < P> TCL在响应<代码>退出>代码时不删除内存结构,因为这通常是浪费时间。终结是昂贵的,而且操作系统在这方面通常比应用程序要好得多

但也有例外。你有一个。您需要做的是安装一个退出处理程序,它关闭线程,尽管对象仍然存在。我不知道如何将其与SWIG集成


另一种方法是将代码放入子解释器中(请参阅
interp
命令),并使
exit
退出该子解释器。然后命令将被整齐地删除(主解释器可以在看到孩子完成后立即离开)。

Welp,我想我没有比这个更好的答案了。