C++에서 delete 와 delete[]의 차이 점 설명

1754 단어 deletedelete[]구별
C++는 new 로 분 배 된 단일 대상 의 메모리 공간 을 회수 할 때 delete 를 사용 하고 new[]로 분 배 된 대상 의 메모리 공간 을 회수 할 때 delete[]를 사용 하 는 것 을 알려 줍 니 다.  new[]와 delete[]에 대해 그 중에서 두 가지 상황 으로 나 뉜 다.(1)기본 데이터 형식 배분 과 회수 공간 이다.(2)사용자 정의 형식 으로 공간 을 분배 하고 회수 합 니 다.
아래 절 차 를 보 세 요.

#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 를 사용 하면 첫 번 째 대상 의 석조 함수 만 호출 됩 니 다.뒤의 대상 의 석조 함수 가 호출 되 지 않 았 기 때문에 그 공간 은 방출 되 었 습 니까?

좋은 웹페이지 즐겨찾기