SYSU 프로그래밍 C++(다섯 번째 주) 신규 및 삭제 키워드, 변수/배열의 동적 생성, 메모리 누수, 기본값

new 및 delete 키워드: (동적으로 문자열 배열 생성)

변수를 동적으로 생성합니다.

배열을 동적으로 생성합니다.

2차원 배열을 동적으로 생성합니다.

새로운 요약:

1. 포인터 = 새 유형 이름; // 동적으로 객체 생성
2. 포인터 = 새 유형 이름(초기화 매개변수); // 초기화 없이 동적으로 객체 생성
3. 포인터 = 새 유형 이름 [배열 길이] {초기화 목록}; // 배열의 동적 할당에 사용, 초기화 목록이 없음(문자열 유형이 있어야 함)

◼ 타입은 기본 타입 또는 클래스 타입이 될 수 있습니다.
        • 클래스 유형인 경우 초기화 매개변수는 클래스의 생성자에 실제 매개변수를 전달하는 것과 같습니다. ◼
새 작업은 할당된 메모리 공간을 가리키는 이 유형의 포인터를 반환합니다.
메모리 할당이 실패하면 예외가 발생하여 NULL을 반환하는 대신 프로그램을 종료합니다.

삭제요약:

1.delete 변수 이름; //기본 사용법
2.delete [] 변수 이름; //배열을 해제할 때 사용

◼ 배열이 동적으로 할당되었으나 [ ] 대신 delete p로 해제되면
        • 컴파일시에는 문제가 없고 실행시에는 일반적으로 에러가 발생하지 않지만
        • 실제로는 동적으로 할당된 배열이 완전히 해제되지는 않는다.
◼ delete는 포인터가 가리키는 객체가 차지하는 메모리를 해제합니다.
        • 개체 포인터를 삭제하면 개체의 소멸자가 호출됩니다. ([ ]는 그 안에 있는 모든 요소가 각각의 소멸자를 호출하도록 합니다.)
        • delete로 공간을 비운 후에도 포인터의 값은 여전히 ​​원래 주소이지만 포인터는 유효하지 않습니다(반복적으로 해제하면 오류가 발생합니다. 즉, 포인터에 불법적으로 액세스합니다).

delete 자체는 객체가 비어있는지 자동으로 체크하고 비어있으면 아무런 동작도 하지 않기 때문에 delete null pointer는 특별한 판단이 필요 없다.

◼ 반복되는 삭제 오류를 방지하기 위해서는 삭제 후 포인터를 null에 할당하는 것이 가장 좋습니다.

메모리 누수:

new 에 대한 포인터 가 손실되어 점유된 메모리가 해제되지 않음

 명시적으로 기본 함수 정의 = 기본값

함수 선언 뒤에 =default를 추가하여 함수를 기본 함수로 선언하면 컴파일러에서 명시적으로 선언된 기본 함수에 대한 함수 본문을 자동으로 생성합니다 .
• =default로 선언되면 함수를 작성하고 구현할 수 없습니다. •         기본 생성자,         소멸자, 복사 생성자         등을
포함하여 특수 멤버 함수의 인수가 없는 기본 함수에만 사용할 수 있습니다.


예: (매개변수가 있으면 이전 것을 사용하고, 매개변수가 없으면 기본값을 사용하며, 현재 A() 구현을 작성할 수 없습니다.)

Supongo que te gusta

Origin blog.csdn.net/jz_terry/article/details/129731069
Recomendado
Clasificación