<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>bigfish的网络博客 - 内存安全</title>
      <link>https://blog.laofu.online</link>
      <description>记录技术和生活</description>
      <generator>Zola</generator>
      <language>zh</language>
      <atom:link href="https://blog.laofu.online/tags/nei-cun-an-quan/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sun, 04 Oct 2026 12:17:00 +0800</lastBuildDate>
      <item>
          <title>Rust 生命周期：为什么要有它，实际代码里到底怎么用？</title>
          <pubDate>Sun, 04 Oct 2026 12:17:00 +0800</pubDate>
          <author>bigfish</author>
          <link>https://blog.laofu.online/blog/20261004-1217-rustsheng-ming-zhou-qi/</link>
          <guid>https://blog.laofu.online/blog/20261004-1217-rustsheng-ming-zhou-qi/</guid>
          <description xml:base="https://blog.laofu.online/blog/20261004-1217-rustsheng-ming-zhou-qi/">&lt;p&gt;第一次看到 Rust 的生命周期标注，很多人都会有一个直接反应：&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; longest&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; y&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; str&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; str&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt;    if&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; x&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; y&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; x&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt; else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; y&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的 &lt;code&gt;&#39;a&lt;/code&gt; 到底是什么？它是不是在告诉 Rust，让这两个字符串“活久一点”？如果只是为了让引用活得更久，为什么不让程序自动处理？&lt;/p&gt;
&lt;p&gt;这个疑问很正常。生命周期不是一种让变量延长寿命的语法，而是在描述一件事：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个引用在被使用时，它指向的数据还活着吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果答案无法确定，程序就可能拿着一个已经失效的地址继续读写。这种引用叫悬垂引用。Rust 选择在编译阶段把它拦下来，而不是等程序运行后偶尔崩溃。&lt;/p&gt;
&lt;p&gt;真正让人困惑的是：生命周期并不只出现在 &lt;code&gt;fn longest&lt;/code&gt; 这种示例里。切片、结构体、迭代器、集合元素、闭包和线程代码里，都可能遇到它。只是有些场景由 Rust 自动推导了，有些场景必须把关系写出来。&lt;/p&gt;</description>
      </item>
    </channel>
</rss>
