0
我想建立自己的版本的使用鏈接列表方法的std容器之一。每次我得到新的數據時,我都會創建一個新節點並將其放入容器中。當它毀壞的容器時,D'tor將銷燬所有節點。奇怪的容器內存泄漏
奇怪的是,在泄漏檢查後(使用valgrind)它說我每次都有泄漏我插入第一個數據。這是插入代碼:
template<typename A, typename T>
typename container<A, T>::Iterator Queue<A, T>::insert(
const A& priority, const T& object) {
Iterator head = this->begin();
Iterator tail = this->begin();
this->findElementPlace(priority, head, tail);
Node<A, T> *newNode = new Node<A, T>(priority, object);
head.node->next = newNode;
newNode->next = (tail.node);
++head;
(this->Psize)++;
return head;
}
它讓我引薦給這條線:
Node<A, T> *newNode = new Node<A, T>(priority, object);
Node類是很基本的:
template<typename A, typename T>
class Node {
public:
Element<A, T> element;
Node* next;
Node() :
element(), next(NULL) {
}
Node(const A priority, const T data) :
element(priority, data), next(NULL) {
}
~Node() {
}
};
沒關係,其中第一數據被存儲,它總是說特定的數據不會被刪除,儘管D'tor負責它。它使用一個擦除功能,從第一個到最後一個擦除所有元素。這是主要的循環:
while ((from < to) && (from < this->end())) {
it.node->next = from.node->next;
Iterator temp = from;
++from;
delete temp.node;
(this->Psize)--;
}
它刪除迭代器之間的所有節點「從」以迭代器「以」包括「從」,不包括「以」
沒有人知道如何解決這一問題?
任何你不使用某種形式的引用計數智能指針的原因,例如, '的std :: shared_ptr'? – djikay
你的迭代器是什麼樣的? –