나는 ArrayList에 구현하는 방법에 내 데이터 구조의 책을 읽고 있어요, 그리고는 삭제 기능에 대한 다음과 같은 코드를 가지고 : 나는 '이 코드에서 소멸자가 호출되는 이유는 무엇입니까?
template<typename T>
ArrayList<T>::~ArrayList() {
delete [] dynArr;
}
:로
template <typename T>
void ArrayList<T>::erase(int index) {
//Delete the element whose index is "index"
//Throw illegalIndex exception if no such element
checkIndex(index);
std::copy(dynArr+ index + 1, dynArr + listSize, dynArr + index);
dynArr[--listSize].~T(); //invoke destructor
}
소멸자가 정의를 정확히 무슨 일이 벌어지고 있는지 혼란 스럽네. 소멸자가 삭제 될 필요가있을 때 전체 배열을 삭제할 수 있습니까?
클래스의 소멸자가 아닌 dynArr 요소의 소멸자를 호출하십시오. ArrayList – Felix
현실 세계에서는이 유형의 코드를 거의 보지 않아야합니다. 컴파일러가 소멸자를 99.99 %의 시간 동안 호출하도록합니다. – jia103