오늘은 약간의 소스 코드 불구하고 읽고 있던 나는이왜 ptr을 저장하지 않고 new를 호출할까요?
Pool<C> *pool = accomodate_component<C>();
new(pool->get(id.index())) C(std::forward<Args>(args) ...);
가 발생하여이 라인은 나에게
new(pool->get(id.index())) C(std::forward<Args>(args) ...);
나는 심지어 법적 C++의 것을 생각하지 않았다 혼란. 결과적으로 pool->get(id.index())
은 C++에게 할당해야하는 크기를 명시 적으로 알릴 수 있다고 알려주는 크기를 반환합니다.
void* operator new (std::size_t count);
지금이 법적 C++ 것을 알고 있지만 내가 모르는 것이 그 목적입니다 정의된다.
내가 왜 new(size) Foo();
으로 전화를 걸겠습니까? 이것이 메모리 누출이 아니어야합니까? 그리고 그것은 완전히 무의미하지 않습니까? 만약 내가 ptr을 가지고 있지 않다면 어떻게 접근 할 수 있을까요?
[새 게재 위치] (http://www.parashift.com/c++-faq/placement-new.html). – Pradhan
게재 위치가 새 것입니다. 그들은 포인터를 저장하지 않습니다. 포인터가 객체를 배치 한 위치를 알고 있기 때문입니다. 이 새로운 형태의 메모리는 실제로 메모리를 할당하지 않습니다. – sp2danny