C에서 C++의 신규/삭제와 동등한 것은 무엇입니까?
C에서 C++의 신규/삭제와 동등한 것은 무엇입니까?
아니면 C/C++에서도 마찬가지인가요?
없습니다.new
/delete
다의 표현
생성자/파괴자를 무시하고 안전을 입력하는 경우 가장 가까운 것은 및 함수입니다.
#include <stdlib.h>
int* p = malloc(sizeof(*p)); // int* p = new int;
...
free(p); // delete p;
int* a = malloc(12*sizeof(*a)); // int* a = new int[12];
...
free(a); // delete[] a;
생성자는 C++에서 예외를 발생시킬 수 있습니다.의 등가물player* p = new player();
C에서는 이런 것일 것입니다.
struct player *p = malloc(sizeof *p);
if (!p) handle_out_of_memory();
int err = construct_player(p);
if (err)
{
free(p);
handle_constructor_error();
}
의 등가물delete p
소멸자는 절대 "결함"해서는 안 되기 때문에 더 간단합니다.
destruct(p);
free(p);
사용new
그리고.delete
C++에서는 동적 메모리 할당/해제와 객체 초기화/해제라는 두 가지 책임을 수행합니다.
다른 모든 답변에서 알 수 있듯이 동적 메모리를 할당하고 해제하는 가장 일반적인 방법은 호출입니다.malloc
그리고.free
OS별 기능을 사용하여 대용량 메모리를 가져오고 해당 메모리에 개체를 할당할 수도 있지만, malloc이 충족하지 못하는 특정 요구 사항이 있는 경우에만 더 드문 일입니다.
C에서 대부분의 API는 다음의 다른 역할을 수행하는 한 쌍의 기능을 제공합니다.new
그리고.delete
.
예를 들어, 파일 api는 열림 및 닫힘 함수 쌍을 사용합니다.
// C++
fstream* fp = new fstream("c:\\test.txt", "r");
delete fp;
// C
FILE *fp=fopen("c:\\test.txt", "r");
fclose(fp);
그럴 수도 있습니다.fopen
사용하다malloc
스토리지를 할당합니다.FILE
또는 프로세스 시작 시 최대 파일 포인터 수에 대해 정적으로 테이블을 할당할 수 있습니다.요점은 API가 클라이언트가 사용할 필요가 없다는 것입니다.malloc
그리고.free
.
다른 API는 클라이언트 코드가 자동, 정적 또는 동적 스토리지를 사용할 수 있도록 하는 생성자 및 소멸자에 해당하는 계약의 초기화 및 해제를 수행하는 기능을 제공합니다.한 예로 pthreads API가 있습니다.
pthread_t thread;
pthread_create( &thread, NULL, thread_function, (void*) param);
이를 통해 클라이언트는 더 많은 유연성을 가질 수 있지만 라이브러리와 클라이언트 사이의 결합을 증가시킵니다. 클라이언트는 클라이언트의 크기를 알아야 합니다.pthread_t
라이브러리가 할당과 초기화를 모두 처리하는 경우 클라이언트가 유형의 크기를 알 필요가 없으므로 클라이언트를 변경하지 않고도 구현이 달라질 수 있습니다.어느 쪽도 C++만큼 클라이언트와 구현 간의 결합을 도입하지 않습니다.(C++을 OO 언어보다 vtables가 포함된 템플릿 메타프로그래밍 언어로 생각하는 것이 더 나은 경우가 많습니다.)
정확한 복제본은 아니지만 호환 가능한 복제본은 malloc이고 무료입니다.
<data-type>* variable = (<data-type> *) malloc(memory-size);
free(variable);
시공자/파괴자 없음 - 어쨌든 C는 그것들을 가지고 있지 않습니다.
크기를 메리크얻면다사음용다니합을으려기를 사용하면 .sizeof
교환입니다.
다차원 어레이로 작업하려면 새 어레이처럼 여러 번 사용해야 합니다.
int** ptr_to_ptr = (int **) malloc(12 * sizeof(int *)); //assuming an array with length 12.
ptr[0] = (int *) malloc(10 * sizeof(int)); //1st element is an array of 10 items
ptr[1] = (int *) malloc(5 * sizeof(int)); //2nd element an array of 5 elements etc
malloc / free 함수를 사용합니다.
늦었지만, C의 방식에 맞는지는 잘 모르겠지만, 이 구문이 정말 마음에 듭니다.
#include <stdlib.h>
#define new(type, length) malloc(sizeof(type)*(length))
#define delete(x) free(x)
int main()
{
int *test = new(int, 30);
delete(test);
}
언급URL : https://stackoverflow.com/questions/2839551/whats-the-equivalent-of-new-delete-of-c-in-c
'programing' 카테고리의 다른 글
Android에서 진행률 표시줄을 사용자 지정하는 방법 (0) | 2023.08.15 |
---|---|
json에 일반적인 방법으로 존재하는 배열 요소에서 열 형성 (0) | 2023.08.15 |
플로팅 차일드 디브의 키를 부모 키로 확장하려면 어떻게 해야 합니까? (0) | 2023.08.10 |
Flask 서버에서 콘솔 메시지 사용 안 함 (0) | 2023.08.10 |
좋아요와 좋아요가 반대 결과를 반환하지 않음 (0) | 2023.08.10 |