c++에서 new 와 delete 연산 자 용법

'new'는 C++의 키워드 이자 연산 자 입 니 다.우리 가 키워드 new 를 사용 하여 더미 위 에 동적 으로 대상 을 만 들 었 을 때,그것 은 실제로 세 가지 일 을 했다.그것 은 메모리 공간 을 얻 고 구조 함 수 를 호출 하 며 정확 한 지침 을 되 돌려 주 는 것 이다.물론 간단 한 형식의 변 수 를 만 들 면 두 번 째 단 계 는 생략 됩 니 다.
new 용법:
1.단일 변수 주소 공간 만 들 기
1)new int;
배열 을 저장 하 는 저장 공간 을 열 고 이 저장 공간 을 가리 키 는 주소.int*a=new int 는 int 형식의 주 소 를 전체 포인터 a 에 할당 하 는 것 입 니 다. 
2)int*a=new int(5)의 역할 은 같 지만 동시에 정수 대 가 를 5 로 한다.
2.배열 공간 개척
1 차원:int*a=new int[100];크기 가 100 인 정형 배열 공간 을 개척 하 다.
2 차원:int**a=new int[5][6]
3 차원 과 그 이상 은 이에 따라 유추 된다.
일반 용법:new 형식(초기 값)
delete 사용법:
1. int *a = new int;
delete a;   //단일 int 공간 방출
2.int *a = new int[5];
delete [] a; //int 배열 공간 방출
new 가 열 린 구조 체 공간 에 접근 하려 면 변수 이름 을 통 해 직접 진행 할 수 없고 할당 포인터 로 만 접근 할 수 있 습 니 다.
C++  new 연산 자 와 delete 연산 자
지금까지 사용 할 변 수 를 미리 정 의 했 습 니 다.프로그램 이 실 행 될 때 이 변 수 는 자동 으로 메모리 공간 을 설정 합 니 다.
 그러나 어떤 변 수 는 언제 사 용 될 지 모 릅 니 다.사용 할 때 변 수 를 설정 하고 변 수 를 사용 하지 않 을 때 변수 가 차지 하 는 공간 을 메모리 에 돌려 주 기 를 원 합 니 다.이 럴 때 저 희 는 new 연산 자 와 delete 연산 자 를 사용 할 수 있 습 니 다.
간단 한 예 를 들 어 프로그램 에서 int 형식의 크기 의 메모 리 를 동적 으로 설정 할 수 있 습 니 다.예 를 들 어:
int *ptr = new int;
이 프로그램 에서 new 연산 자 는 int 에 필요 한 공간 을 설정 하고 이 공간의 주 소 를 되 돌려 줍 니 다.따라서 포인터 ptr 를 사용 하여 이 주 소 를 저장 합 니 다.이 프로그램 은 공간 만 설정 하지만 공간 에 있 는 저장 값 을 초기 화하 지 않 습 니 다.설정 이 끝 난 후에 저장 값 을 지정 하려 면 다음 과 같이 정의 할 수 있 습 니 다.
int *ptr = new int(100);
이 프로그램 은 공간 을 설정 한 후에 공간의 저장 값 을 100 으로 설정 합 니 다.
실행 결과:
공간 위치:0x3d 2458
공간 저장 값:100
공간 위치:0x3d 2458
공간 저장 값:200
new 연산 자 를 사용 하여 동적 으로 설정 한 공간 은 전체 프로그램 이 끝나 기 전에 메모리 에 자동 으로 반환 되 지 않 습 니 다.delete 를 사용 하여 이 공간 을 메모리 에 돌려 주어 야 합 니 다.예 를 들 어 위의 프로그램 이 끝나 기 전에 하 는 동작 은 이 프로그램 에서 표시 가 끝나 면 프로그램 이 묶 이지 만 여 기 는 delete 의 용법 을 시범 해 야 합 니 다.그리고 이것 도 좋 은 습관 입 니 다.앞으로 프로그램 이 지속 적 으로 실행 되 는 과정 에서 new 를 대량으로 사용 하고 delete 를 적당 하 게 사용 하지 않 으 면 공간 이 반환 되 지 않 아 전체 메모리 공간 이 소 진 될 것 입 니 다.
마찬가지 로 new 설정 을 사용 하여 얻 은 배열 공간 은 사용 하지 않 을 때 도 delete 를 사용 하여 메모리 에 반환 해 야 합 니 다.방법 은 다음 과 같 습 니 다.
delete [] arr;
delete 를 사용 하여 배열 공간 을 메모리 에 반환 할 때 우 리 는[]를 추가 해 야 합 니 다.전체 배열 공간 을 반환 하 는 것 을 표시 합 니 다.

//                         

#include <iostream>
using namespace std;

int main() {
 int *ptr = new int(100);

 cout << "    :" << ptr<< endl;
 cout << "     :" << *ptr<< endl;

 *ptr = 200;

 cout << "    :" << ptr<< endl;
 cout << "     :" << *ptr<< endl;

 delete ptr;

 return 0;
}

다음은 다른 네티즌 의 보충
C 언어 에서 동적 분배 메모리 용 malloc()함수,메모리 용 free()함 수 를 방출 합 니 다.다음 과 같다.

int *p = (int*) malloc( sizeof(int) * 10 ); //  10 int      
free(p); //    
C++에서 이 두 함 수 는 여전히 사용 할 수 있 지만 C++는 두 개의 키 워드 를 추가 하 였 습 니 다.new 와 delete:new 는 동적 으로 메모 리 를 분배 하고 delete 는 메모 리 를 방출 합 니 다.
new 와 delete 로 메모리 할당 이 더 간단 합 니 다:

int *p = new int; //  1 int      
delete p; //    
new 조작 부 호 는 뒤의 데이터 형식 에 따라 필요 한 공간의 크기 를 추정 합 니 다.연속 적 인 데 이 터 를 할당 하려 면 new[]를 사용 할 수 있 습 니 다.

int *p = new int[10]; //  10 int      
delete[] p;
new[] 로 분 배 된 메모 리 는delete[] 로 방출 되 어야 하 며,그것들 은 일일이 대응 해 야 한다.malloc() 와 마찬가지 로 new 도 쌓 인 구역 에서 메모 리 를 분배 하고 수 동 으로 풀 어야 합 니 다.그렇지 않 으 면 프로그램 이 실 행 될 때 까지 운영 체제 에서 회수 할 수 밖 에 없습니다.메모리 유출 을 피하 기 위해 서 는 보통 new 와 delete,new[]와 delete[]연산 자가 쌍 을 이 루어 나타 나 야 하 며,C 언어 에서 malloc(),free()와 함께 사용 하지 마 십시오.C++에 서 는 new 와 delete 를 사용 하여 메모리 관 리 를 권장 합 니 다.C++의 새로운 기능 을 사용 할 수 있 습 니 다.가장 뚜렷 한 것 은 구조 함수 와 분석 함 수 를 자동 으로 호출 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기