由於工作的原因,需要在線程安全的情況下對std::list<T>進行該list進行訪問,因此就簡單的封裝了下,代碼如下:
template<typename T>
class List {
public:
List () {}
~List () {}
void PushBack(const T& value) {
boost::mutex::scoped_lock lock(mutex_);
element_list_.push_back(value);
}
T Front() {
boost::mutex::scoped_lock lock(mutex_);
return element_list_.front();
}
void PopFront() {
boost::mutex::scoped_lock lock(mutex_);
element_list_.pop_front();
}
bool Empty() {
boost::mutex::scoped_lock lock(mutex_);
return element_list_.empty();
}
void Resize(const size_t& size) {
boost::mutex::scoped_lock lock(mutex_);
element_list_.resize(size);
}
size_t Size() {
boost::mutex::scoped_lock lock(mutex_);
return element_list_.size();
}
private:
boost::mutex mutex_;
std::list<T> element_list_;
private:
List (const List &);
List & operator=(const List &);
};
調用方式:
List<string*> list_;
auto item = list_.Pop();
list_.PopFront();
// 刪除時的調用方式
while (list_.Size() > 0) {
auto item = list_.Front();
list_.PopFront();
delete item;
item = nullptr;
}
構造函數中對list_中PushBack(value)元素,析構函數中釋放元素佔用的內存