Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 new 연산자와 new 연산자의 차이점은 무엇입니까?

<시간/>

C++에서 새 객체를 생성하려면 메모리에 메모리 블록을 생성한 다음 생성자를 호출하여 메모리 블록을 초기화해야 합니다. new 키워드를 사용하여 메모리 요소를 생성할 수 있습니다. 이 새 연산자는 두 개의 연속 작업을 수행하고 있습니다. 하지만 new 연산자는 메모리 공간만 생성합니다.

새 키워드

new 연산자는 힙 섹션에 대한 메모리 할당 요청을 나타내는 특수한 유형의 연산자입니다. 충분한 메모리를 사용할 수 있는 경우 새 연산자만 포인터 변수에 대한 메모리를 초기화합니다. 일반적인 newkeyword를 사용하여 객체를 생성하면 두 개의 연속 작업을 수행합니다.

  • ? 객체에 대한 메모리 블록을 힙 섹션에 할당
  • ? 생성자를 호출하여 메모리 블록을 초기화합니다.

예시 코드

#include <iostream>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
};
int main() {
   Box* myBox = new Box;
}

출력

Constructor called!

새로운 오퍼레이터

new 연산자는 함수입니다. 이 함수는 new 연산자를 오버로드하는 데 사용됩니다. 이것을 사용하여 원시 메모리 블록을 할당할 수 있습니다. 이것은 개념적으로 malloc() 또는 calloc() 함수와 유사합니다. 이 함수는 생성자를 호출하지 않으므로 메모리가 초기화되지 않습니다. 그러나 이 오버로드된 메서드에서 포인터를 반환한 후 컴파일러는 그 이후에 생성자를 호출합니다.

예시 코드

#include <iostream>
#include <cstdlib>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
   void *operator new(size_t size) {
      cout << "Call Operator New"<<endl;
      void *p = malloc(size);
      return p;
   }
};
int main() {
   Box* myBox = new Box;
}

출력

Call Operator New
Constructor called!