나는 C++ 메모리 할당 메커니즘을 알아 내려고하고있다. operator new()
과 new
표현의 차이점을 이해합니다. 내가 here을 발견C++에서 new []와 new [] 사이의 차이점은 무엇입니까?
는하지만, operator new()
및 operator new[]()
의 프로토 타입은 거의 동일하며, operator new[]()
의 기본 구현은 단순히 operator new()
의 해당 버전을 호출해야합니다.
내 질문은 :
- 우리는 단순히 메모리의 크기를 할당하고 배열로 메모리를 사용하는
operator new()
기능을 사용할 수있는 경우,operator new[]()
의 목적은 무엇인가?
왜0x562ecf758e70::MyClass() 0x562ecf758e71::MyClass() 0x562ecf758e72::MyClass() 0x562ecf758e90::~MyClass() 0x562ecf758e8f::~MyClass() 0x562ecf758e8e::~MyClass() 0x562ecf758e8d::~MyClass() 0x562ecf758e8c::~MyClass() 0x562ecf758e8b::~MyClass() 0x562ecf758e8a::~MyClass() 0x562ecf758e89::~MyClass() 0x562ecf758e88::~MyClass() 0x562ecf758e87::~MyClass() 0x562ecf758e86::~MyClass() 0x562ecf758e85::~MyClass() 0x562ecf758e84::~MyClass() 0x562ecf758e83::~MyClass() 0x562ecf758e82::~MyClass() 0x562ecf758e81::~MyClass() 0x562ecf758e80::~MyClass() 0x562ecf758e7f::~MyClass() 0x562ecf758e7e::~MyClass() 0x562ecf758e7d::~MyClass() 0x562ecf758e7c::~MyClass() 0x562ecf758e7b::~MyClass() 0x562ecf758e7a::~MyClass() 0x562ecf758e79::~MyClass() 0x562ecf758e78::~MyClass() 0x562ecf758e77::~MyClass() 0x562ecf758e76::~MyClass() 0x562ecf758e75::~MyClass() 0x562ecf758e74::~MyClass() 0x562ecf758e73::~MyClass() 0x562ecf758e72::~MyClass() 0x562ecf758e71::~MyClass() 0x562ecf758e70::~MyClass() *** Error in `/home/alec/.cpp-run/1/a.out': free(): invalid pointer: 0x0000562ecf758e68 ***
delete[]
이 존재하지 않았다 (30) 오브젝트를 폭파하려고 않았다 밖으로이었다가 추락하기 전에 메시지 다음 그것은 인쇄struct MyClass { MyClass() { cout << this << "::MyClass()" << endl;} ~MyClass() { cout << this << "::~MyClass()" << endl;} }; int main() { MyClass *ptr = (MyClass *)::operator new[](sizeof(MyClass) * 3); new (ptr) MyClass; new (ptr+1) MyClass; new (ptr+2) MyClass; delete[] ptr; return 0; }
:
- 나는이 코드 조각을 시도
operator new[]()
에 의해 할당 된 메모리? 또한 왜 충돌 했습니까?
당신은 웹에 그 주제에 대한 단일 기사/블로그 게시물이 없다고 말합니까? –
[좋은 C++ 서적 읽기] (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) –
뭐하고 있니? 내 제안은 당신이 이것에 대해 걱정하지 말고, 포인터 사용을 중지하고, 일반적인 객체를 사용하는 것입니다. 단일 객체가 필요하면'MyClass c'를 사용하고, 컨테이너를 원하면'std :: vector v'를 사용하십시오. 코드를 추측하는 것은 당신을 향상시키지 않을 것입니다. 간단히 시작하십시오. –
Tas