>  기사  >  백엔드 개발  >  C++ 리뷰 핵심 포인트 요약 4부: New 및 delete 사용

C++ 리뷰 핵심 포인트 요약 4부: New 및 delete 사용

黄舟
黄舟원래의
2017-01-16 11:23:301690검색

객체의 동적 생성 및 해제

1 new 및 delete의 기본 구문

1) 소프트웨어 개발 과정에서 메모리 공간을 동적으로 할당하고 취소해야 하는 경우가 종종 있습니다. 동적 연결 목록과 마찬가지로 노드 삽입 및 삭제. C 언어에서는 라이브러리 함수 malloc과 free를 사용하여 메모리 공간을 할당하고 해제합니다. C++에서는 malloc 및 free 함수를 대체할 수 있는 더 간단하고 강력한 new 및 delete 연산자를 제공합니다.

참고: new 및 delete는 함수가 아닌 연산자이므로 실행이 효율적입니다.

2) C++에는 C 언어와의 호환성을 위해 여전히 malloc 및 free 기능이 유지되지만 사용자는 malloc 및 free 기능 대신 new 및 delete 연산자를 사용하는 것이 좋습니다. new 연산자의 예:

new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址
new char[10]; //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
new int[5][4]; //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址
float *p=new float (3.14159); //开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p

new로 배열 공간을 할당할 때는 초기값을 지정할 수 없습니다. 메모리 부족이나 기타 이유로 정상적으로 공간을 할당할 수 없는 경우 new는 널 포인터인 NULL을 반환하며, 사용자는 포인터 값을 통해 공간 할당 성공 여부를 판단할 수 있다.

적용예

C++ 리뷰 핵심 포인트 요약 4부: New 및 delete 사용

2 클래스 객체의 동적 생성 및 해제

클래스 이름을 사용하여 정의된 객체는 정적입니다. 프로그램을 실행하는 동안 개체가 차지하는 공간은 언제든지 해제될 수 없습니다. 그러나 때때로 사람들은 필요할 때 객체를 생성하고, 더 이상 필요하지 않을 때 객체를 삭제하고, 객체가 차지하는 메모리 공간을 다른 데이터에 할당하고 싶어합니다. 이는 메모리 공간 활용도를 향상시킵니다.

C++에서는 new 연산자를 사용하여 객체를 동적으로 생성하고 delete 연산자를 사용하여 객체를 취소할 수 있습니다.

예:

Box *pt; Box 클래스 객체에 대한 포인터 정의 포인터 변수 pt

pt=new Box; //새 객체의 시작 주소는 pt에 저장됩니다

이 새 객체는 pt를 통해 액세스할 수 있습니다. 프로그램에서. 예:

coutheight; //객체의 높이 멤버 출력

coutvolume( ) //볼륨 호출 객체 함수의 볼륨을 계산하고 출력합니다.

C++에서는 new를 실행할 때 새로 생성된 객체를 초기화할 수도 있습니다. 예를 들어

Box *pt=new Box(12,15,18);

이러한 작성 방식은 위의 두 문(포인터 변수 정의 및 new를 사용하여 새 객체 생성)을 다음과 같이 결합합니다. 하나의 명령문을 작성하고 초기 값을 지정하십시오. 이게 더 세련됐네요.

새 객체의 높이, 너비, 길이는 각각 12, 15, 18의 초기 값을 갖습니다. 객체는 객체 이름이나 포인터로 호출될 수 있습니다.

새 작업을 실행할 때 메모리 양이 부족하고 필요한 메모리 공간을 열 수 없는 경우 대부분의 최신 C++ 컴파일 시스템에서는 new가 0 포인터 값을 반환하게 됩니다. 반환값이 0인지 확인만 하면 메모리 할당 성공 여부를 판단할 수 있다.

ANSI C++ 표준에서는 new 실행 중 오류가 발생하면 "예외"가 "발생"하고 사용자는 예외를 기반으로 관련 처리를 수행할 수 있다고 제안합니다. 그러나 C++ 표준에서는 새로운 오류가 발생할 때 포인터 값 0이 반환되는 것을 여전히 허용합니다. 현재 다양한 컴파일 시스템은 새로운 오류를 다양한 방식으로 처리합니다.

new로 생성된 객체가 더 이상 필요하지 않으면 삭제 연산자를 사용하여 해제할 수 있습니다.

delete pt; //pt가 가리키는 메모리 공간을 해제합니다.

이렇게 하면 pt가 가리키는 객체가 취소됩니다. 이후에는 프로그램에서 개체를 사용할 수 없습니다.

포인터 변수 pt를 사용하여 서로 다른 동적 개체를 차례로 가리키는 경우 잘못된 개체가 삭제되지 않도록 포인터 변수의 현재 포인터에 주의해야 합니다. 삭제 연산자가 실행되면 소멸자가 자동으로 호출되어 메모리 공간을 해제하기 전에 정리 작업을 완료합니다.

3 new 및 malloc 심층 분석

혼합 테스트, 유사점 및 차이점 비교

결론: malloc은 생성자를 호출하지 않습니다. class

Free는 클래스의 소멸자를 호출하지 않습니다


위는 C++ 검토 포인트와 New 및 delete For 사용에 대한 네 번째 요약입니다. 더 많은 관련 콘텐츠를 보려면 PHP 중국어 웹사이트(www.php.cn)를 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.