1. new의 정확한 동작방식
1. operator new()라는 함수를 사용해서 메모리 할당
2. (1)이 성공하고 객체라면 생성자 호출
3. C의 메모리 주소를 해당 타입으로 캐스팅해서 리턴.
2. 생성자/소멸자를 호출하지 않고 메모리만 할당하는 방법은?
Point* p = static_cast<Point*>(operator new(sizeof(Point)));operator delete(p);위의 방법을 이용하면 생성자는 호출되지 않고 메모리만 할당되는 것을 알 수 있다.
3. operator new()를 재정의 해서 메모리 할당을 변경 가능하다(new 자체를 재정의 하는게 아니다)
#include <iostream>using namespace std; void* operator new( size_t sz) { cout << "my operator new : " << sz << endl; return malloc(sz); } void* operator new( size_t sz, char* s, int n) { cout << "my operator new2 : " << sz << endl; return malloc(sz); } void operator delete(void* p ) { cout << "my operator delete" << endl; free(p); } int main() { int* p1 = new int; // 인자가 1개인 operator new() int* p1 = new("AA", 2) int; // 인자가 3개인 operator new delete p1; }
operator new()는 오버로딩이 가능하다. 단, 반드시 1번째 인자는 size_t를 가져야 한다.
두번째 인자부터는 마음대로 만들어도 된다.
728x90
'Software Development > C, C++' 카테고리의 다른 글
2_new3_nothrow (0) | 2014.07.23 |
---|---|
2_new2_예제 (0) | 2014.07.21 |
1_this4_다중 상속의 멤버함수 포인터 (0) | 2014.07.20 |
1_this3_멤버 변수의 포인터 (0) | 2014.07.20 |
1_this2_함수포인터의 this (0) | 2014.07.20 |