Allocator 구현해보다가 생성자 호출이 도저히 안되겠어서 레퍼런스를 찾아봤는데 대충 저렇게 되어있다고 함
그런데 봐도 모르겠는 부분이 있어서 질문 점 하겠읍니다.
1. 앞의 부분은 void*형으로 바꿔서 new 연산자를 사용하는 거 같은데 메모리 동적 할당은 일어나지 않는 것인가?
일어나지 않는다면 왜 그런 것인가? 생성자는 new 연산자가 있으면 호출되는 건 알겟음
2. 뒷부분은 forward를 사용해서 rvalue lvalue 구분해가지고 인자로 넘기는 거 같은데 문제는 이런 문법은 어디서 난 것인가?
만약 인자로 들어온 게 int형 인자 하나였다면 new((void*) p ) T((int)value);가 되었을 텐데
이렇게 중간이 나눠진 방식으로 인자가 대입된다는 건 보지못했음..
고수님들의 답변 기다리겠읍니다
생각을 좀 해봤는데 new(p)로 만든다는 걸 알려서 생성자를 호출하겠다고 알리고 뒤에 있는 T(args)로 args를 인자로 받는 T의 생성자를 호출함을 알리는 게 맞습니까?
p가 가르키는 위치 뒤에 args를 생성한다는 뜻일 겁니다 - dc App
레퍼런스 찾아보니까 p 주소에 T 객체를 생성(args를 받음)이더라구여 역시 레퍼런스는 잘 읽어봐야한다 싶었읍니다
1. placement new라고 이미 존재하는 메모리 영역에 객체를 생성하는 문법임 2. named parameter를 그대로 넘겨주면 rvalue reference로 받아왔어도 lvalue로 간주되기 때문에 forward가 있어야 함
forward가 있어야 하는건 이해했는데 new(p) T(value) 식으로 띄워져서 나눠져 있는 건 처음봐서여 placement new에 대해선 읽어보겠읍니다 감사합니다