프로그래밍/C++ 스피비 2011. 4. 1. 12:24
스마트포인터!? 간략하게 소개하면 메모리 누수를 막기위한 기술이다 즉 포인터를 관리하는 매니저클래스 비스 무리한것을 두고 소멸자에서 동적할당 메모리를 해제해주는 식의 기법 이번 시간엔 꽤나 영특한 녀석을 소개하고자 한다. 바로 '스마트 포인터' 란 놈인데 게으르고 주위 깊지 못한 본인과 같은 프로그래머 들에겐 한 줄기 단비와 같은 존재가 아닐수 없다. * 첨부된 예제에서 사용된 스마트 포인터는 boost 라이브러리에 속한 Shared Pointer( shared_ptr ) 란 놈이다. 따라서 이놈을 사용하려면 미리 라이브러리를 설치 해야 하는데 이곳에서 알아보도록 ( http://www.boost.org ) 동적 할당의 그림자 C++ 과 같은 객체 지향 언어에서 객체를 동적 할당을 이용해 생성하는 것은 ..
프로그래밍/C++ 스피비 2011. 4. 1. 11:58
메모리 풀 할때 new 오버로딩 하면 편하다. 그냥 평소처럼 쓰면 되니까. 언제든지 되돌릴수 있고 class Test { public: int a; int b; void* operator new(size_t size) { printf("한개할당중\n"); Test* temp = (Test*)malloc(size); return temp; } void* operator new[](size_t size) { printf("%d 개할당중\n", size / sizeof(Test)); Test* temp = (Test*)malloc(size); return temp; } Test() { a = b = 123; } }; int _tmain(int argc, _TCHAR* argv[]) { Test* t1, *t2..
프로그래밍/C++ 스피비 2011. 4. 1. 11:23
////////////////////////////////////////////////// // //수업 1 // //대입 연산자 (오버로딩 심화 공부) // ////////////////////////////////////////////////// 대입연산자오버로딩은 보통 사용자정의 클래스에 기본형을 대입하는것을 하기 위해쓴다!!!!! class SK{ int m_a; }; SK = 10; // 이런식을 하기위해 쓴다! 이렇게 할때는 대입연산자오버로딩함수 부분에서 &T타입으로 리턴해줘야 대입이 가능하다!!(중요) 그렇다면 기본타입에 사용자정의 클래스를 대입하려면? => 기본타입 클래스를 건드릴수 없으므로 전역함수로 설정해줘야함! 복사생성자와 대입연산자는 꼭 구별하자!! 디폴트 복사생성자 디폴트 대입연산..
프로그래밍/C++ 스피비 2011. 3. 31. 12:32
*오버로딩이 뭔지? =>함수나 연산자를 중복정의해서 사용하는 것. *컴파일러가 오버로딩판별하는법? 인자의 개수와, 인자의 종류, const 유무 에 따라서 오버로딩 판별함! *연산자 오버로딩이란? operator키워드 와 연산자를 겹쳐서 함수이름처럼!!! 쓴다.(함수와는 차이가 있다! ) *함수와 연산자오버로딩함수의 차이점? => 연산자오버로딩하면 함수처럼 호출 가능하다. (함수와 동일) 연산자만으로도 가능하다는 또 다른 문법을 제공한다. ( C++ 문법이다!!) ex)x + 10 는 x.operator+(10) 이렇게 해석된다!!!! *연산자 오버로딩 제한! 연산자오버로딩은 삼항 연산자는 안된다! ( 이항 연산, 단항 연산 가능 ) 밑에 안되는 연산자를 조사해보았다. 밑에서 다시 얘기함. *연산자 오버..
프로그래밍/C++ 스피비 2011. 3. 31. 12:14
복사생성자와 복사대입연산자의 차이 복사생성자(copy constructor) => 어떤 객체의 초기화를 위해 그와 같은 타입의 객체로 부터 초기화할때 호출되는 함수. 복사대입연산자(copy assignment operator): => 같은 타입의 다른 객체에 어떤 객체의 값을 복사하는 용도로 쓰이는 함수입니다. 둘다 정의를 안해줄경우 디폴트가 있다! 디폴트 복사생성자, 디폴트 대입연산자 둘은 모두 얕은 복사를한다.!!! 그러므로 포인터를 가지는 경우 복사생성자와 대입연산자를 정의해주는 습관을 들이자! 아니 반드시하자! 예를들어))) class SK{ public: SK(); SK(const SK& temp); //복사생성자 SK& operator=( const SK& temp );//복사대입연산자 }; ..