刪除後C 中的指標
考慮C 中的以下程式碼片段:
<code class="cpp">A* a = new A(); A* b = a; delete a; A* c = a; // Undefined behavior in C++11 A* d = b; // Potentially legal, but uncertain</code>在 C 11 中,存取已刪除的指標的值會導致未定義的行為。這適用於指標 a 和 b。將 a 的值複製到 c 中也是未定義的,因為 a 指向已釋放的記憶體。 但是,在 C 14 中,該行為變成實現定義的。此標準指定:「透過無效指標值進行間接存取以及將無效指標值傳遞給釋放函數具有未定義的行為。無效指標值的任何其他使用都具有實現定義的行為。」
因此,在C 14 中,存取b 的值(a 的副本)也是實作定義的。它可能會導致未定義的行為,但也可能透過特定的實現以不同的方式處理。 總之,A* c = a;且 A* d = b;在 C 11 中未定義,在 C 14 中實現定義。這是因為指標 a 和 b 在刪除操作後都指向無效記憶體。
以上是刪除原始指標後,C 中複製的指標會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!