由于工作的原因,需要在线程安全的情况下对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)元素,析构函数中释放元素占用的内存