From 82e8558de355c8ed6b6e1955f840488fb4fa0414 Mon Sep 17 00:00:00 2001 From: Andrew <3007598+andysim3d@users.noreply.github.com> Date: Tue, 25 Jun 2024 22:59:16 -0400 Subject: [PATCH] Update pin-unpin.md --- src/advance/async/pin-unpin.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/advance/async/pin-unpin.md b/src/advance/async/pin-unpin.md index ba227cad..12f2ae28 100644 --- a/src/advance/async/pin-unpin.md +++ b/src/advance/async/pin-unpin.md @@ -16,9 +16,9 @@ struct SelfRef { } ``` -在上面的结构体中,`pointer_to_value` 是一个裸指针,指向第一个字段 `value` 持有的字符串 `String` 。很简单对吧?现在考虑一个情况, 若`String` 被移动了怎么办? +在上面的结构体中,`pointer_to_value` 是一个裸指针,指向第一个字段 `value` 持有的字符串 `String` 。很简单对吧?现在考虑一个情况, 若 `value` 被移动了怎么办? -此时一个致命的问题就出现了:新的字符串的内存地址变了,而 `pointer_to_value` 依然指向之前的地址,一个重大 bug 就出现了! +此时一个致命的问题就出现了:`value` 的内存地址变了,而 `pointer_to_value` 依然指向 `value` 之前的地址,一个重大 bug 就出现了! 灾难发生,英雄在哪?只见 `Pin` 闪亮登场,它可以防止一个类型在内存中被移动。再来回忆下之前在 `Future` 章节中,我们提到过在 `poll` 方法的签名中有一个 `self: Pin<&mut Self>` ,那么为何要在这里使用 `Pin` 呢?