Latest web development tutorials

C ++ 동적 메모리

C는이 작품 ++ 필수 프로그래머 자격을 갖춘 C가 될 것입니다 어떻게 ++에서 동적 메모리를 이해합니다. C ++ 프로그램 메모리는 두 부분으로 나누어 져 있습니다 :

  • 스택 : 함수 내에서 선언 된 모든 변수는 스택 메모리를 차지합니다.
  • 힙 :이 프로그램 메모리는 사용되지 않는 프로그램 실행 동적 메모리를 할당하는 데 사용될 수있다.

많은 메모리가 실행시 필요한 메모리의 크기를 결정하는 데 필요한 특정 정보에 정의 된 변수를 저장하는 데 필요한 횟수가 사전에 예측할 수있다.

C ++에서, 그것은 할당 된 어드레스 공간을 반환 특별한 연산자 런타임 힙 메모리에서의 소정 유형의 변수에 할당 할 수 있습니다. 이 연산자는새로운 운영자되고 있습니다.

동적 메모리를 할당 할 필요가없는 경우, 당신은 할당 된 메모리 전에 새 운영자에 의해 삭제delete 연산자를 사용할 수 있습니다.

신규 및 삭제 사업자

여기에 메모리의 데이터 유형 동적 할당의 일반 구문 될 수있는 새로운 연산자는 다음과 같습니다

new data-type;

여기서, 데이터 타입은 사용자 정의를 포함하는 클래스 또는 구조를 포함하는 데이터의 임의의 유형이 될 수있는 내장 된 어레이를 포함하는 데이터 타입 일 수있다.우리가 먼저 내장 데이터 유형을 살펴 보자. 예를 들어, 우리는 그 메모리가 실행 시간에 할당되며, 메모리를 요청 유형의 이중 포인터의 포인터를 정의 할 수있다. 우리는 이러한 목표를 달성하기 위해 다음과 같은 성명에 따라새로운 연산자를 사용할 수 있습니다 :

double* pvalue  = NULL; // 初始化为 null 的指针
pvalue  = new double;   // 为变量请求内存

무료 저장 영역이 소진 된 경우, 성공적으로 메모리를 할당 할 수 있습니다. 새로운 운영자가 NULL 포인터를 반환 여부를 확인하고 다음을 적절한 조치를 취하는 것이 좋습니다 :

double* pvalue  = NULL;
if( !(pvalue  = new double ))
{
   cout << "Error: out of memory." <<endl;
   exit(1);

}

C언어에서의 malloc () 함수는 C ++ 여전히 존재 등장 있지만의 malloc () 함수를 사용하지 않는 것을 추천한다.주요 장점에 비해 신규의 malloc () 함수는 새로운 메모리를 할당 할 것을, 또한 객체를 만들었다.

언제든지 할 때 동적 변수 이미 할당 된 메모리가 더 이상 필요하다는 것을 느낄 다음과 같이, 당신은 그것을 사용하는 메모리를 해제하려면 delete 연산자를 사용할 수 있습니다 :

delete pvalue;        // 释放 pvalue 所指向的内存

위의 개념에서 사용 다음 예는 새를 사용하고 연산자를 삭제하는 방법을 보여줍니다

#include <iostream>
using namespace std;

int main ()
{
   double* pvalue  = NULL; // 初始化为 null 的指针
   pvalue  = new double;   // 为变量请求内存
 
   *pvalue = 29494.99;     // 在分配的地址存储值
   cout << "Value of pvalue : " << *pvalue << endl;

   delete pvalue;         // 释放内存

   return 0;
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

Value of pvalue : 29495

동적 메모리의 할당 배열

우리는 다음과 같은 문자 배열 (20 자 문자열), 우리는 동적으로 메모리를 할당 할 배열 구문 위의 예제를 사용하여 메모리를 할당한다고 가정 :

char* pvalue  = NULL;   // 初始化为 null 的指针
pvalue  = new char[20]; // 为变量请求内存

다음과 같이 우리가 방금 만든 배열을 삭제하려면 문은 다음과 같습니다

delete [] pvalue;        // 删除 pvalue 所指向的数组

다음과 같이 여기에 다차원 배열을위한 메모리를 할당 할 수있는 일반 구문 new 연산자는 다음과 같습니다

int ROW = 2;
int COL = 3;
double **pvalue  = new double* [ROW]; // 为行分配内存

// 为列分配内存
for(int i = 0; i < COL; i++) {
    pvalue[i] = new double[COL];
}

다차원 배열의 메모리를 해제 :

for(int i = 0; i < COL; i++) {
    delete[] pvalue[i];
}
delete [] pvalue; 

동적 메모리 할당 개체

목적은 단순 데이터 유형과 다르지 않다. 예를 들어, 다음 코드를 고려, 우리는이 개념을 명확히하기 위해 객체의 배열을 사용합니다 :

#include <iostream>
using namespace std;

class Box
{
   public:
      Box() { 
         cout << "调用构造函数!" <<endl; 
      }
      ~Box() { 
         cout << "调用析构函数!" <<endl; 
      }
};

int main( )
{
   Box* myBoxArray = new Box[4];

   delete [] myBoxArray; // Delete array

   return 0;
}

만약 박스가 네 개의 객체가 메모리 어레이를 할당 포함 할 경우, 생성자는 이러한 객체를 삭제할 때와 동일한 방식으로, 소멸자 동일한 횟수 (네 번)를 호출 할 것이며, 네 번 호출한다.

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

调用构造函数!
调用构造函数!
调用构造函数!
调用构造函数!
调用析构函数!
调用析构函数!
调用析构函数!
调用析构函数!