diff --git a/Lib/memory-holder.cpp b/Lib/memory-holder.cpp
index 967e054ddf8a85660cee4b52f4e76e3ec467cafc..e4dc3b546707dbc16e4cdc1691600c65bcfb7eed 100644
--- a/Lib/memory-holder.cpp
+++ b/Lib/memory-holder.cpp
@@ -3,7 +3,7 @@
 #ifdef INCLUDE_CUDA
 #include "MemoryProcessing.cuh"
 #endif
-#include <cstdio>
+
 #include <algorithm>
 
 template< MemType mem >
@@ -184,7 +184,6 @@ std::vector<buffer<MemType::GPU> >& memory_pipline_base::get_memtyped_vector()
 template< MemType mem >
 void memory_pipline_base::set_available(const int id)
 {
-    // printf("Id %d, size = %d\n", id, get_memtyped_vector<mem>().size());
     get_memtyped_vector<mem>()[id].set_status(true);
 }
 
@@ -279,7 +278,6 @@ int memory_pipline<choose_type>::get_buffer(const size_t required_size, void *&
 
     buff_vec.push_back(buffer<mem>(required_size));
     ptr = buff_vec.back().get_ptr();
-    // printf("buff_vec.size() %d\n", buff_vec.size());
     int id = buff_vec.size() - 1;
     return id;
 }
@@ -348,40 +346,24 @@ template int memory_pipline<buf_choose_policy::find_best_unsorted>::get_buffer<M
 template int memory_pipline<buf_choose_policy::find_best_unsorted>::get_buffer<MemType::GPU>(const size_t required_size, void *& ptr);
 #endif
 
-
-memory_pipline<buf_choose_policy::naiv>* memory_faucet::mem_pipe_naiv = nullptr;
-memory_pipline<buf_choose_policy::sorted_vec>* memory_faucet::mem_pipe_sorted = nullptr;
-memory_pipline<buf_choose_policy::find_best_unsorted>* memory_faucet::mem_pipe_unsorted = nullptr;
-
-template<buf_choose_policy choose_type>
-memory_pipline<choose_type>* memory_faucet::get_faucet()
+template< >
+memory_pipline<buf_choose_policy::naiv>& memory_faucet::get_faucet()
 {
-    if(mem_pipe_naiv == nullptr)
-    {
-        mem_pipe_naiv = new memory_pipline<choose_type>();
-    }
+    static memory_pipline<buf_choose_policy::naiv> mem_pipe_naiv;
     return mem_pipe_naiv;
 }
 
-template memory_pipline<buf_choose_policy::naiv>* memory_faucet::get_faucet();
-
 template< >
-memory_pipline<buf_choose_policy::sorted_vec>* memory_faucet::get_faucet()
+memory_pipline<buf_choose_policy::sorted_vec>& memory_faucet::get_faucet()
 {
-    if(mem_pipe_sorted == nullptr)
-    {
-        mem_pipe_sorted = new memory_pipline<buf_choose_policy::sorted_vec>();
-    }
+    static memory_pipline<buf_choose_policy::sorted_vec> mem_pipe_sorted;
     return mem_pipe_sorted;
 }
 
 template< >
-memory_pipline<buf_choose_policy::find_best_unsorted>* memory_faucet::get_faucet()
+memory_pipline<buf_choose_policy::find_best_unsorted>& memory_faucet::get_faucet()
 {
-    if(mem_pipe_unsorted == nullptr)
-    {
-        mem_pipe_unsorted = new memory_pipline<buf_choose_policy::find_best_unsorted>();
-    }
+    static memory_pipline<buf_choose_policy::find_best_unsorted> mem_pipe_unsorted;
     return mem_pipe_unsorted;
 }
 
@@ -389,18 +371,16 @@ memory_pipline<buf_choose_policy::find_best_unsorted>* memory_faucet::get_faucet
 template< MemType mem, buf_choose_policy choose_type >
 memBuf<mem, choose_type>::memBuf(const size_t required_size)
 {
-    memory_pipline<choose_type>* mem_pipe = memory_faucet::get_faucet<choose_type>();
-    id = mem_pipe->template get_buffer<mem>(required_size, buf);
-    // printf("mem %d, choose_type %d, kkddd %d\n", mem, choose_type, mem_pipe->template get_memtyped_vector<mem>().size());
+    memory_pipline<choose_type>& mem_pipe = memory_faucet::get_faucet<choose_type>();
+    id = mem_pipe.template get_buffer<mem>(required_size, buf);
     size = required_size;
 }
 
 template< MemType mem, buf_choose_policy choose_type >
 memBuf<mem, choose_type>::~memBuf()
 {
-    memory_pipline<choose_type>* mem_pipe = memory_faucet::get_faucet<choose_type>();
-    // printf("mem %d, choose_type %d, kk %d\n", mem, choose_type, mem_pipe->template get_memtyped_vector<mem>().size());
-    mem_pipe->template set_available<mem>(id);
+    memory_pipline<choose_type>& mem_pipe = memory_faucet::get_faucet<choose_type>();
+    mem_pipe.template set_available<mem>(id);
 }
 
 template< MemType mem, buf_choose_policy choose_type >
diff --git a/Lib/memory-holder.h b/Lib/memory-holder.h
index 96b86845f0fa56453994c08abdf0331784a7bab3..0e236b611cdc43aab050781da42ca16a07bff12d 100644
--- a/Lib/memory-holder.h
+++ b/Lib/memory-holder.h
@@ -117,14 +117,10 @@ private:
     memory_faucet(const memory_faucet&) = delete;
     memory_faucet& operator=(const memory_faucet&) = delete;
 
-    static memory_pipline<buf_choose_policy::naiv>* mem_pipe_naiv;
-    static memory_pipline<buf_choose_policy::sorted_vec>* mem_pipe_sorted;
-    static memory_pipline<buf_choose_policy::find_best_unsorted>* mem_pipe_unsorted;
-
 public:
 
     template<buf_choose_policy choose_type = buf_choose_policy::naiv>
-    static memory_pipline<choose_type>* get_faucet();
+    static memory_pipline<choose_type>& get_faucet();
 };
 
 template< MemType mem, buf_choose_policy choose_type = buf_choose_policy::naiv >