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!