저는 C++을 처음 접했습니다. 나는 C++에서의 Singly Linked List의 장난감 구현을했습니다.C++의 List 클래스에 대한 소멸자
template<typename T>
class List {
template<typename U>
struct Node {
U data_;
Node<U>* next_;
Node() : data_(0), next_(nullptr) {}
Node(U data) : data_(data), next_(nullptr) {}
};
private:
Node<T>* head_;
std::size_t size_;
public:
List() : head_{nullptr}, size_{0} {}
void insert(const T& item) {
Node<T>* p(new Node<T>(item));
if (size_ == 0) {
head_ = p;
} else {
p->next_ = head_;
head_ = p;
}
size_++;
}
std::size_t getSize() {
return size_;
}
~List(){
while(head_){
Node<T> p = head_;
delete(p);
head_ = head_->next_;
}
};
이 코드가 작동하는 것 같습니다. 그러나 문제는 new
에 의해 할당 된 객체가 ~List()
소멸자에도 불구하고 결코 정리되지 않는다는 것입니다. 누군가가 나를 이해하는 데 도움이 될 수 있습니다, 어떻게 할당 된 노드를 정리하는이 클래스의 소멸자를 작성할 수 있습니까?
중요한 설명 : 스마트 포인터를 사용하여이 작업을 수행 할 수 있다는 것을 알고 있지만 이전 학교에서 힙을 관리하는 방법을 알고 싶습니다.
은 당신이 그것으로 발생하는 문제에 대한 질문을 한 후 소멸자를 작성 시도하고 : 당신은 당신이 다음을 수행 할 수있는 요소를 나타 경우를 들어
당신. –'T '클래스의 소멸자는'~ T'라는 인자가없는 멤버 함수입니다. –
목록의 노드를 반복하는 방법을 알고 있습니까? 그럼 당신은 기본적으로 당신이 알아야 할 모든 것을 알고 있습니다. –