나는 포인터와 다이나믹 메모리가있는리스트의리스트를 만들고 있는데, 노드에 의해 구성된 메인리스트이고 각 노드는 또 다른리스트 또는 어떤 종류의 타입 (int, double ...)이 될 수있다. 내가 삭제하려고하면 모든 오류를 나타납니다일반 컨테이너에있는 목록을 삭제하려면 어떻게해야합니까?
C2541: 'delete' : cannot delete objects that are not pointers.
목록의 소멸자 :
목록이 비어 있지 않은 동안, 나는 그것의 첫 번째 요소를 삭제합니다.
template <class T> Lista<T>::~Lista()
{
while (!es_vacia())
{
borrar(1);
}
}
노드의 소멸자 :
기능 borrar(1)
호출 노드의 소멸자. 그것은 포인터를 null에 두었습니다 (이중 연결리스트입니다). 클래스 T가 포인터 인 경우 (목록이 포함되어 있기 때문에) 삭제되지만 작동하지 않습니다.
template <class T> Nodo<T>::~Nodo()
{
sig = 0;
ant = 0;
if (std::is_pointer<T>::value)
{
delete valor;
}
}
나는 오류 프롬프트가 간단하다고 생각합니다. –
클래스는 포함해야하는 객체가 아닌 * 노드 *의 할당을 담당해야합니다. 그것은 사용자의 문제입니다. – 0x499602D2
예를 들어, 사용자가'Lista' 클래스를 파기 할 때 자동 할당 해제를 원한다면,'std :: unique_ptr'를 요소 유형으로 전달했을 것입니다. –
0x499602D2