考虑下面的代码:
pub async fn parse_bytes<'a, R: Deserialize<'a>>(_query: serde_json::Value) -> R {
let result: Vec<u8> = vec![]; // fetch_result(&query).await
serde_json::from_slice::<R>(result.as_slice())
.expect("Can't parse bytes response")
}
Run Code Online (Sandbox Code Playgroud)
它不编译:
`result` does not live long enough
borrowed value does not live long enough
Run Code Online (Sandbox Code Playgroud)
相反,提供result.leak()是有效的,但我不确定这是正确的解决方案:该方法的文档叙述:
此函数主要对于在程序的剩余生命周期中存在的数据有用。删除返回的引用将导致内存泄漏
一旦函数结束,返回的引用就会被删除。
如何解决上述问题而不导致内存泄漏?
DeserializeOwned代替使用。
use serde::de::DeserializeOwned;
pub async fn parse_bytes<R: DeserializeOwned>(_query: serde_json::Value) -> R {
let result: Vec<u8> = vec![]; // fetch_result(&query).await
serde_json::from_slice::<R>(result.as_slice())
.expect("Can't parse bytes response")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |