diff --git a/examples/drop.rs b/examples/drop.rs
new file mode 100644
index 0000000000000000000000000000000000000000..0de5383bda477694007e15f9bbeb86eb2d592d67
--- /dev/null
+++ b/examples/drop.rs
@@ -0,0 +1,21 @@
+use core::mem;
+use poolman::PoolMan;
+
+static P: PoolMan<u32, 2> = PoolMan::new([0; 2]);
+fn main() {
+    P.init();
+    {
+        let e = P.alloc().unwrap();
+        println!("e {}", *e);
+        mem::drop(e);
+        let mut e1 = P.alloc().unwrap();
+        println!("e1 {}", *e1);
+        *e1 = 2;
+        println!("e1 {}", *e1);
+
+        let e2 = P.alloc().unwrap();
+        println!("e2 {}", *e2);
+    }
+    let e = P.alloc().unwrap();
+    println!("e {}", *e);
+}
diff --git a/examples/usage.rs b/examples/usage.rs
new file mode 100644
index 0000000000000000000000000000000000000000..a7268d07973c95c1bdba5ddf9f2a106d80f961a1
--- /dev/null
+++ b/examples/usage.rs
@@ -0,0 +1,31 @@
+use core::mem;
+use poolman::PoolMan;
+
+#[derive(Debug)]
+struct IDrop(u32);
+
+impl core::ops::Drop for IDrop {
+    fn drop(&mut self) {
+        println!("drop value: {}", self.0);
+    }
+}
+
+static P: PoolMan<IDrop, 2> = PoolMan::new([IDrop(10), IDrop(11)]);
+
+fn main() {
+    P.init();
+    {
+        let e = P.alloc().unwrap();
+        println!("e {:?}", *e);
+        mem::drop(e);
+        let mut e1 = P.alloc().unwrap();
+        println!("e1 {:?}", *e1);
+        *e1 = IDrop(2);
+        println!("e1 {:?}", *e1);
+
+        let e2 = P.alloc().unwrap();
+        println!("e2 {:?}", *e2);
+    }
+    let e = P.alloc().unwrap();
+    println!("e {:?}", *e);
+}