new
new연산자는 동적 메모리할당이고 예를들어서 Knight* k1 = new Knight으로 new 다음 타입을 넣어주면 해당하는 타입의 크기를 반환해준다고 알고 있었다..
우리가 흔히 사용하는 new도 오버로딩으로 되어있는데 해당 부분을 찾아 보면
_NODISCARD _Ret_notnull_ _Post_writable_byte_size_(_Size) _VCRT_ALLOCATOR
void* __CRTDECL operator new(
size_t _Size
);
- size_t를 받는 다는 것을 알 수 있다.
궁금해
여기서 이해가 안갔던 부분은 사이즈를 받는데 어떻게 객체 타입을 넣어줘도되는 건지가 궁금했다. msdn을 살펴보니 "C++ 클래스 개체에 대한 메모리를 할당하는 데 사용되는 경우 new 메모리가 할당된 후 개체의 생성자가 호출됩니다." 라고 나와있다.
이러한 설명으로 Knight* k1 = new Knight(); 도 가능한 것이다. ms의 예제도 첨부하겠습니다.
class Acct
{
public:
// Define default constructor and a constructor that accepts
// an initial balance.
Acct() { balance = 0.0; }
Acct( double init_balance ) { balance = init_balance; }
private:
double balance;
};
int main()
{
Acct *CheckingAcct = new Acct;
Acct *SavingsAcct = new Acct ( 34.98 );
double *HowMuch = new double { 43.0 };
// ...
}
- 인수를 없이 타입만 적으면 생성자로 호출되는 것과 동일.!
-출처 : https://docs.microsoft.com/ko-kr/cpp/cpp/new-operator-cpp?view=msvc-170
'c++' 카테고리의 다른 글
라이브러리 개념 (0) | 2022.05.16 |
---|---|
vector 구현. (0) | 2022.04.17 |
참조 vs 포인터 (0) | 2022.01.02 |
cpp transform (0) | 2021.12.15 |
static 키워드 (cpp, java) (0) | 2021.10.23 |