C++ 메모리 모델에 대한 이해에서 new []로 객체 배열을 만들고 'delete []'로 삭제할 때만 스칼라 생성자/소멸자가 사용되며 컴파일러는 내부 for 루프를 생성하여 모든 요소 위치를 반복합니다 . VC에서 왜 'delete'와 'delete []'는 스칼라 삭제 소멸자를 사용합니까?
int main()
{
B obj;
B* pb = new B;//no scalar constructor
delete pb;//scalar deleting destructor
}
는하지만 내가 사용할 때 '새' '[] 디버그 버전에 대한 스칼라 삭제의 descturctor', VC 여전히위한 코드를 생성 ','사용하지 않고, 하나의 요소를 작동하는 '삭제 발견했다. 오른쪽
- 스칼라 생성자/소멸자가없는 한 쌍에 나타나는 수 :
그래서 제 질문은? 내 테스트 프로그램에서 발견 된 스칼라 삭제 소멸자 만 있습니다.
- new 또는 new []로 생성 된 모든 객체에는 스칼라 삭제 소멸자가 있어야합니까? 왜 한 요소가 여전히이 고려 사항을 가지고 있는데, 한 요소의 경우에는 예외 처리, 스택 되감기, 추가 삭제 소멸자에 의존해야하는 필요성은 없습니다. 어떤 이유?