gpt4 book ai didi

rust - 如何测试RAII?

转载 作者:行者123 更新时间:2023-12-03 11:44:34 26 4
gpt4 key购买 nike

我目前正在尝试在Rust中测试一些RAII代码,我想延迟删除一个值,直到特定的代码行为止。
在C#中,GC.KeepAlive可以防止在调用GC.KeepAlive之后才对对象进行垃圾回收。从应用程序的角度来看,该方法本质上是禁止操作的,但是它可以保证对对象的有效引用,直到代码流中的特定点为止。它对测试最有用。
有没有一种惯用的方法来延迟删除值直到Rust中的某个点?我正在尝试测试一些RAII代码,并且我希望使用其他Rust程序员可以识别的约定。
例如:

let foo = some_func();

// Force foo to be deallocated

// This line does something that, if foo were still alive, it would fail the test
some_other_func();

最佳答案

最简单的方法是显式删除对象。当您调用mem::drop时,该对象将移入该函数,因此该对象必须在该点之前而不是该点之后存在于调用程序中。这向其他Rust开发人员发出信号,表示您当时明确想要销毁。它并不一定表明您为什么要在那里进行销毁,因此,如果从上下文中看不出来,您可能仍需要注释。
例如,如果您有一个临时目录并需要保留它:

extern crate tempfile;

fn do_something() {
let tempdir = tempfile::TempDir::new();

// Do some things with your temporary directory.

std::mem::drop(tempdir);

// Do some things without your temporary directory.
}

关于rust - 如何测试RAII?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64563281/

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