Selaa lähdekoodia

V0.3.3
1、修改了RingQueue,有参构造函数和无参构造函数都可以初始化

Apple 5 kuukautta sitten
vanhempi
commit
2500b9febc
1 muutettua tiedostoa jossa 35 lisäystä ja 2 poistoa
  1. 35 2
      common/RingQueue/RingQueue.hpp

+ 35 - 2
common/RingQueue/RingQueue.hpp

@@ -4,7 +4,7 @@
 #include <cstdlib>
 #include <utility>
 #include <mutex>
-#include <atomic>
+// #include <atomic>
 
 /**
  * @brief 这里采用零公摊的方式,设置多大的空间,就有多大的空间可以使用
@@ -34,9 +34,12 @@ class RingQueue
 {
 
 public:
-    RingQueue(long size = 1024);
+    RingQueue();
+    RingQueue(long size);
     ~RingQueue();
 
+    /* 设置队列大小 */
+    void setQueueSize(long size);
     /* 入队 */
     bool enQueue(const T& data);
     bool enQueue(T&& data);
@@ -67,6 +70,13 @@ private:
  * ***************************** 函数实现 *****************************
  * ===================================================================== */
 
+/* 这个构造函数需要调用 setQueueSize 设置环形队列的大小 */
+template<typename T>
+RingQueue<T>::RingQueue() : m_capacity(0) , m_front(-1), m_rear(-1)
+{
+    
+}
+
 template<typename T>
 RingQueue<T>::RingQueue(long capacicy) : m_capacity(capacicy)
 {
@@ -85,6 +95,29 @@ RingQueue<T>::~RingQueue()
     }
 }
 
+/**
+ * @brief 设置队列大小
+ *        注意:使用这个设置,如果队列中存储的是指针,指针的内存区域需要在调用这个函数之前释放,不然可能会造成
+ *              内存泄漏
+ * 
+ * @tparam T 
+ * @param size 
+ */
+template<typename T>
+void RingQueue<T>::setQueueSize(long size)
+{
+    if(m_queue != nullptr)
+    {
+        delete[] m_queue;
+        m_queue = nullptr;
+    }
+
+    m_capacity = size;
+    m_front = -1;
+    m_rear = -1;
+    m_queue = new T[m_capacity];
+}
+
 
 /* 入队 */
 template<typename T>