C++에서 delete 와 delete[]의 차이 점 설명
아래 절 차 를 보 세 요.
#include <iostream>;
using namespace std;
class T {
public:
T() { cout << "constructor" << endl; }
~T() { cout << "destructor" << endl; }
};
int main()
{
const int NUM = 3;
T* p1 = new T[NUM];
cout << hex << p1 << endl;
// delete[] p1;
delete p1;
T* p2 = new T[NUM];
cout << p2 << endl;
delete[] p2;
}
여러분 은 스스로 이 프로그램 을 실행 할 수 있 습 니 다.delete p1 과 delete[]p1 의 다른 결 과 를 보면 저 는 여기에 실행 결 과 를 붙 이지 않 겠 습 니 다.실행 결과 에서 알 수 있 듯 이 delete p1 은 공간 을 회수 하 는 과정 에서 p1[0]이라는 대상 만 분석 함 수 를 호출 했 고 다른 대상,예 를 들 어 p1[1],p1[2]등 은 자신의 분석 함 수 를 호출 하지 않 았 다.이것 이 문제 의 문제점 이다.delete[]를 사용 하면 공간 을 회수 하기 전에 모든 대상 이 자신의 분석 함 수 를 먼저 호출 합 니 다. 기본 형식의 대상 은 분석 함수 가 없 기 때문에 기본 형식 으로 구 성 된 배열 공간 을 delete 와 delete[]로 회수 할 수 있 을 것 입 니 다.그러나 클래스 대상 배열 에 대해 서 는 delete[]만 사용 할 수 있 습 니 다.new 의 단일 대상 에 대해 서 는 delete 만 사용 할 수 있 고 delete[]로 공간 을 회수 할 수 없습니다. 그래서 간단 한 사용 원칙 은 new 와 delete,new[]와 delete[]가 대응 하여 사용 하 는 것 이다.
new int[]로 신청 한 메모리 공간 을 delete 로 풀 때 기본 데이터 형식 으로 석조 함수 가 없 기 때문에 delete 와 delete[]를 사용 하면 둘 다 신청 한 메모리 공간 을 방출 합 니 다.사용자 정의 데이터 형식 이 있 으 면 석조 함수 가 있 을 때 new[]로 신청 한 공간 은 delete[]로 풀 어야 합 니 다.delete[]를 하려 면 대상 배열 의 석조 함 수 를 하나씩 호출 하고 공간 을 방출 하기 때 문 입 니 다.delete 를 사용 하면 첫 번 째 대상 의 석조 함수 만 호출 됩 니 다.뒤의 대상 의 석조 함수 가 호출 되 지 않 았 기 때문에 그 공간 은 방출 되 었 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
삭제 기능이 있는 React Slick Slider슬라이더는 웹 애플리케이션에서 이미지를 표시하는 가장 일반적이고 널리 사용되는 방법 중 하나입니다. 미리 만들어진 슬라이더를 사용하고 웹 사이트를 아름답게 만들 수 있는 많은 패키지가 있습니다. 오늘은 여기에서 re...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.