본문 바로가기

분류 전체보기40

1일차 - thiscall Intro 예전 Advanced C++ 수업에서 일반 함수 포인터와 (클래스의) 멤버 함수 포인터의 차이점, 그리고 멤버 함수의 호출원리에 대해 배웠었다. 자세한 것은 예전 정리글을 참고하고, 여기서는 이것이 클래스 디자인에 어떻게 영향을 줄 수 있는지를 중점적으로 정리한다. Review - member function pointer 멤버 함수 포인터와 관련된 내용을 간단히 요약하면 다음과 같다. 비정적(non-static) 멤버 함수는 실제로는 this 포인터를 첫번째 인자로 받기때문에 일반적인 함수 포인터로는 멤버 함수의 주소를 담을 수 없다는 것이었다. 반면에 정적(static) 멤버 함수는 this 포인터를 인자로 가지지 않기 때문에 일반 함수 포인터에 주소를 담는 것이 가능하다. class Di.. 2016. 5. 19.
Concurrency in C++11 (번역) 출처 원문링크 - Here (Posted on April 7, 2014 by paolosev) Intro C++ 11은 람다 표현식, 초기화 리스트, 우측값(rvalue) 참조, auto 타입 추론 등과 같은 특징들이 추가되면서 이전 버전들보다 훨씬 나아졌다. C++11 표준 라이브러리는 이제 정규 표현식, 개선된 스마트 포인터, 그리고 멀티 스레드 라이브러리까지 제공한다. 그러나 모던 C++은 병렬/비동기 연산에 대해서는 아직까지 제한적인 기능만을 제공하며, 이는 C#과 같은 언어들과 비교했을 때 특히 그렇다. The need for asynchrony 그런데 우리는 왜 비동기성(asynchrony)에 대한 지원을 필요로 하는 것일까? 컴퓨터 아키텍쳐는 도처에 있는 멀티 코어 프로세서들과 클라우드 상에.. 2016. 5. 2.
6일차 - 단위전략 기반의 클래스 디자인 Intro 아래는 간단한 List 클래스의 일부와 이 클래스를 사용하는 코드이다. 다음의 코드에서 문제점이 무엇인지를 생각해보자. #include using namespace std; template class List { public: void push_front (const T& a) { // do something (no synchronization) } // other merber functions and variables }; List g_list; //< 전역변수 int main(int argc, char* argv[]) { g_list.push_front(10); // do something return 0; } 위의 코드에서 g_list는 전역변수이므로 다중 스레드 환경에서는 thread-.. 2015. 11. 24.
6일차 - thin template Intro 임의의 타입 객체들을 저장하는 단순한 컨테이너를 구현해보자. 이 컨테이너의 기능은 컨테이너의 맨 앞에 객체를 추가하거나, 컨테이너에 저장된 첫 element를 얻어오는 것으로 충분하다. 또한, 컨테이너의 현재 상태(state)를 보여주는 함수 2개(size, empty)도 함께 포함시키자. 이러한 요구사항을 만족시키는 컨테이너의 선언은 아래의 코드와 같은 형태가 될 것이다. template class Container { public: int size () const; bool empty () const; void push_front (const T& a); T& front (); private: T* buffer_; int size_; }; 이제 위의 Container 템플릿을 아래와 같이 .. 2015. 11. 4.