这是一个挺有趣的问题。是这样的,在一个系统里,有一个函数,已经写好了
HigherLevel<Good> GetGood(std::string path);
这个函数根据一个文件的路径来做一个事情,比如,把这个文件读入,然后创建一个文件,把原来文件的内容翻转写入。然后,返回一个Good变量。这里,HigherLevel是另一个模板类,用来包装一下函数返回的正确或者错误等信息。所以关键是Good。Good这个类保存了一些这个新创建的文件的信息,它的析构函数把这个新创建的文件删除。
有一个单元测试,里面需要做这样的事情。因为主测试是Rust写的,而Rust会并行执行,那样就会造成每个测试生成了不同的新文件,但是这样就出现了一些问题。解决办法是,把创建这个唯一文件的过程放到另一个进程,可以只做一次。这个单独的进程,是用C++写的,就有人建议我直接用GetGood。我用了,发现了一个问题。在我这个测试里,是用了一个单独的进程来调用GetGood
int main(...){
auto a = GetGood(...);
return 0;
}
看起来不错?但是,进程结束的时候另一个主测试进程开始测试,发现需要的文件不在,因为a析构了。然后我就加入了等待
int main(...){
auto a = GetGood(...);
sleep(1000s);
return 0;
}
可以了?代码审查者不喜欢,说,你不能想个办法让析构函数不调用吗?我绞尽脑汁,另一个审查者想出了一个办法。然后我又想出了另一个。
看看大家有多少简单的办法?
--
FROM 98.42.143.*