, 나는 이상한 C++의 new
연산자의 사용을 발생?이상한 C++는 new 연산자 사용
답변
배치의 새로운 구문입니다. 메모리의 지정된 위치에 객체를 구성 할 수 있습니다. , 후자는 (그것의 X
을 구성하지 않고)는 X
을 유지하기에 충분한 메모리를 할당
#include <new>
...
void *buffer = ::operator new(sizeof(X));
X *p = new (buffer) X;
...
p->~X();
::operator delete(buffer);
:
X *p = new X;
...
delete p;
당신은 수행하여 같은 효과를 얻을 수 있습니다 새의 "정상적인"사용을 고려 할당 된 메모리에 X
을 명시 적으로 구성합니다. 나중에, 명시 적으로 생성 된 X
을 제거한 다음 해당 메모리를 포함하는 메모리를 할당 해제합니다. http://www.parashift.com/c++-faq/placement-new.html
는 new()
운영자가 size
(바이트 크기)이 걸릴 수 nothrow_value
이 나 pointer
(이미 할당 된 메모리의 개체를 생성 (널 대신 bad_alloc
예외의 포인터를 반환) :
또한 C++ FAQ를 참조하십시오 이 포인터가 가리키고있다) 인수이며, 사용법에서는 arr
이 가리키는 메모리 위치에 새로운 객체를 생성한다고 설명한다. 그것에 관해보기 흉하지 않은 가이드를 위해 나는 this link를 볼 것이다. 경우
이 구문은 placement new
구문이라고합니다. 일반적으로 미리 할당 된 버퍼에 객체를 생성하는 데 사용됩니다. 이것은 메모리 풀, 가비지 컬렉터를 구축 할 때 또는 성능 및 예외 안전성이 가장 중요한 경우 (메모리가 이미 할당되었으므로 할당 실패의 위험이 없으며 미리 할당 된 버퍼에 객체를 생성하는 데 시간이 덜 소요됨) . 이 시스템에 반환 올 때
char *buf = new char[sizeof(string)]; // pre-allocated buffer
string *s1 = new (buf) string("test1"); // placement new
string *s2 = new string("test2"); //ordinary new
는 자동으로 마법을 수행 더 placement delete
이 없습니다. 메모리 버퍼를 사용하는 모든 개체의 할당을 해제하면 안됩니다. 대신 각 객체를 수동으로 삭제 한 다음 [] 원래 버퍼 만 삭제하십시오
나는 수동으로 각각의 객체를 파괴 한 다음 원래의 버퍼를 삭제한다는 것을 의미한다고 생각합니다. –
@StuartGolodetz 그 어리석은 실수를해서 유감입니다. 그것을 바로 잡았다. – jester
- 1. SlimReaderWriter (SRW) 잠금 배열 (new 연산자 사용)
- 2. 이해 C++ new 연산자
- 3. JavaScript의 new 연산자 이해
- 4. 클래스의 new 연산자 오버로드
- 5. 바인딩 연산자 new?
- 6. 동적으로 new 연산자
- 7. 빠른 new 연산자 문제
- 8. JavaScript의 "new"연산자
- 9. 오류가 new 연산자
- 10. 클래스 별 연산자 new
- 11. PHP "new"연산자
- 12. 연산자 new와 연산자 new [] 사이의 차이점은 무엇입니까?
- 13. 조건부 연산자, 이상한 동작
- 14. C++ 사용자 지정 연산자 new
- 15. 템플릿 클래스의 오버로드 new 연산자
- 16. C++ new 연산자 - 메모리 레이아웃
- 17. new 연산자 및 참조 오류
- 18. C++에서 new 연산자 오버로드
- 19. 힙에 메모리 할당을위한 new 연산자
- 20. 기본 쿼리가있는 JPQL NEW 연산자?
- 21. new 및 delete 연산자 오버로드
- 22. C는 다시 학교에 # 범위 지정 연산자
- 23. C는 오류를 컴파일하지 ++ - 일치를 위해 '연산자 ='
- 24. 이상한 결과를주는 DateTime 연산자
- 25. C는
- 26. 스칼라 연산자 이상한
- 27. 프롤로그에서 이상한 연산자 (!)
- 28. 포인터가있는 이상한 연산자
- 29. Groovy의 이상한 나누기 연산자
- 30. 이상한 삼진 연산자
google "placement new"또는 다음 질문을 참조하십시오 : http://stackoverflow.com/questions/222557/what-uses-are-there-for -placement-new – Kos
@Askyane 간단한 요약과 당신의 열람을위한 링크를 포함 시켰습니다. – GMasucci