From a005b2cd2ac679da7393e537aa05e2b7d32d36d5 Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Mon, 18 Jul 2016 22:29:05 -0400 Subject: [PATCH] Rewrite/expand doc examples for `Vec::set_len`. --- src/libcollections/vec.rs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index da56b21cf0c..9badf8cf183 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -532,9 +532,37 @@ impl Vec { /// # Examples /// /// ``` - /// let mut v = vec![1, 2, 3, 4]; + /// use std::ptr; + /// + /// let mut vec = vec!['r', 'u', 's', 't']; + /// /// unsafe { - /// v.set_len(1); + /// ptr::drop_in_place(&mut vec[3]); + /// vec.set_len(3); + /// } + /// assert_eq!(vec, ['r', 'u', 's']); + /// ``` + /// + /// In this example, there is a memory leak since the memory locations + /// owned by the vector were not freed prior to the `set_len` call: + /// + /// ``` + /// let mut vec = vec!['r', 'u', 's', 't']; + /// + /// unsafe { + /// vec.set_len(0); + /// } + /// ``` + /// + /// In this example, the vector gets expanded from zero to four items + /// without any memory allocations occurring, resulting in vector + /// values of unallocated memory: + /// + /// ``` + /// let mut vec: Vec = Vec::new(); + /// + /// unsafe { + /// vec.set_len(4); /// } /// ``` #[inline]