개발/C, C++ 48

2_new2_예제

예제)메모리 해제가 제대로 되지 않은게 남았는지 자동으로 확인해주는 프로그램Operator new와 Operator delete 재정의 이용,int count = 0; //메모리 할당해준 객체 카운트 세는 변수 //할당한 객체의 파일명, 몇번째 라인인지, 주소, 크기를 저장 struct BLOCK { char file[256]; int line; void* addr; int size; }; BLOCK mem[10000]; // 할당한 메모리 정보를 관리할 배열 //operator new, operator delete 재정의 void* operator new( size_t sz, char* file, int line) { void* p = malloc(sz); strcpy(mem[count].file, f..

개발/C, C++ 2014.07.21

2_new1_new,operator new, operator delete

1. new의 정확한 동작방식1. operator new()라는 함수를 사용해서 메모리 할당2. (1)이 성공하고 객체라면 생성자 호출3. C의 메모리 주소를 해당 타입으로 캐스팅해서 리턴. 2. 생성자/소멸자를 호출하지 않고 메모리만 할당하는 방법은?Point* p = static_cast(operator new(sizeof(Point))); operator delete(p);위의 방법을 이용하면 생성자는 호출되지 않고 메모리만 할당되는 것을 알 수 있다. 3. operator new()를 재정의 해서 메모리 할당을 변경 가능하다(new 자체를 재정의 하는게 아니다) #include using namespace std; void* operator new( size_t sz) { cout

개발/C, C++ 2014.07.20

1_this3_멤버 변수의 포인터

멤버 변수의 포인터class Dialog { public: int color; void Close() {} }; int main() { // 멤버 변수의 포인터 만들기. int Dialog::*p = &Dialog::color; printf("%d\n", p); // 0 Dialog dlg; dlg.*p = 10; // dlg.color = 10 으로 컴파일. } 멤버 변수의 포인터의 경우 멤버 함수의 포인터와 마찬가지로 Dialog::(객체명::)을 붙여주면 된다. 접근하는 방법 역시 역참조를 이용, dlg.*p와 같이 접근하면 된다.(객체를 생성해야 접근 가능) 이 때 멤버변수 포인터 p를 출력하면 0임을 확인할 수 있다.Dialog 클래스에 int a를 추가하고 p를 다시 한번 출력해 보자. cla..

개발/C, C++ 2014.07.20

1_this2_함수포인터의 this

함수포인터에서 this1. 일반 함수포인터에 멤버함수의 주소를 담을 수는 없다.2. 일반 함수포인터에 static 멤버함수의 주소를 담을 수는 있다. 다음의 예제에서.. class Dialog { public: void Close() {} static void Close2() {} }; void foo() {} int main() { void(*f1)() = &foo; //함수포인터 f1 f1(); (*f1)(); void(*f2)() = &Dialog::Close; // error void(*f3)() = &Dialog::Close2; // ok.. this가 없다. } 함수포인터 f1()는 인수가 없는 void 함수를 담는 함수포인터이다. 위의 그림만 봤을 때 f2(), f3() 역시 일치하는 Clo..

개발/C, C++ 2014.07.20

1_ this1

this : 멤버함수를 호출한 객체의 주소를 나타낸다. 1. 일반멤버함수는 첫번째 인자로 this가 추가된다.2. static 멤버함수는 this가 추가되지 않는다. 다음의 Point 클래스에서 class Point { int x, y; public: void set(int a, int b) { x = a; // this->x = a; y = b; // this->y = b; } static void foo(int a) { x = a; } };함수 void set(int a, int b)의 경우 void set(Point* const this, int a, int b)로 컴파일된다. 자신의 객체를 의미하는 this가 추가되고 컴파일된다. 이는 동일한 클래스의 객체가 여러개 생성된다 해도 멤버함수는 하나만..

개발/C, C++ 2014.07.20
반응형