[Effective C++] 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자
C++/Effective C++2022. 11. 10. 18:13[Effective C++] 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자

Effective C++ 3rd Edition. Scott Meyers. C++ 프로그래머의 필독서라고 불리는 Effective C++을 읽고 중요한 내용을 정리한 글 입니다. Item5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자. 🔻생성자, 소멸자, 대입 연산자 모든 c++ 클래스에 한 개 이상 꼭 들어 있는 것이 생성자, 소멸자, 대입 연산자이다. ◽ 생성자 : 새로운 객체를 메모리에 만드는 데 필요한 과정을 제어하고 초기화를 맡는 함수. ◽ 소멸자 : 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어하는 함수. ◽ 대입 연산자 : 기존의 객체에 다른 객체의 값을 줄 때 사용하는 함수. 이들을 어떻게 하면 멋지게 모아둘 수 있을까? 🔻컴파일러가..

[Effective C++] 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자
C++/Effective C++2022. 11. 9. 23:49[Effective C++] 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자

Effective C++ 3rd Edition. Scott Meyers. C++ 프로그래머의 필독서라고 불리는 Effective C++을 읽고 중요한 내용을 정리한 글 입니다. Item4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자. 초기화되지 않은 값을 읽도록 내버려 두면 해당 객체에 쓰레기 값이 들어가 있게되어 프로그램이 내가 의도한대로 흘러가지 않을 가능성이 매우 크다. 따라서 초기화가 중요하다. int x; class Point { int x, y; }; Point p; 이런식으로 객체의 값을 명시적으로 초기화 해주지 않았다면, 어떤 상황에서는 초기화가 보장되지만, 또 어떤 경우에서는 안된다. 이것만 보면 C++의 객체 초기화가 중구난방인 것처럼 보이겠지만, 그런 것은 절대 아니다. 언제 ..

[Effective C++] 3. 낌새만 보이면 const를 들이대 보자!
C++/Effective C++2022. 11. 9. 01:22[Effective C++] 3. 낌새만 보이면 const를 들이대 보자!

Effective C++ 3rd Edition. Scott Meyers. C++ 프로그래머의 필독서라고 불리는 Effective C++을 읽고 중요한 내용을 정리한 글 입니다. Item3. 낌새만 보이면 const를 들이대 보자! 🔻const const에 대해 생각해 볼 때 가장 멋지다고 말할 수 있는 부분이 있다면, '의미적인 제약'을 소스 코드 수준에서 붙인다는 점과 컴파일러가 이 제약을 단단히 지켜준다는 점이다. 어떤 값이 불변이어야 한다는 제작자의 의도를 컴파일러와 다른 프로그래머와 나눌 수 있는 아름다운 수단이다. const는 팔방미인! const의 사용처 전역 혹은 네임스페이스 유효범위의 상수를 선언(정의)하는데 사용(항목 2) 파일, 함수, 블록 유효범위에서 static으로 선언한 객체에도 ..

[Effective C++] 2. #define을 쓰려거든 const, enum, inline을 떠올리자.
C++/Effective C++2022. 11. 8. 20:34[Effective C++] 2. #define을 쓰려거든 const, enum, inline을 떠올리자.

Effective C++ 3rd Edition. Scott Meyers. C++ 프로그래머의 필독서라고 불리는 Effective C++을 읽고 중요한 내용을 정리한 글 입니다. Item2. #define을 쓰려거든 const, enum, inline을 떠올리자. 🔻#define보다는 const, enum item이름을 다른 말로 해보면 "가급적 전처리기보다는 컴파일러를 더 가까이 하자"라고 할 수 있다. #define ASPECT_RATIO 1.653 위와 같은 코드를 썻을 때, 우리는 ASPECT_RATIO가 Symbolic name으로 보이지만, 소스코드가 컴파일러에게 넘어가기 이전에 전처리기가 해당 글자를 숫자 상수로 바꾸어버리기 때문에 컴파일러의 입장에서는 전혀 보이지 않는다. 그렇기때문에 해당 ..

[Effective C++] 1. C++을 언어들의 연합체로 바라보자.
C++/Effective C++2022. 11. 8. 18:25[Effective C++] 1. C++을 언어들의 연합체로 바라보자.

Effective C++ 3rd Edition. Scott Meyers. C++ 프로그래머의 필독서라고 불리는 Effective C++을 읽고 중요한 내용을 정리한 글 입니다. Item1. C++을 언어들의 연합체로 바라보자. 🔻 C++을 바라보는 관점을 바꾸자 오늘날의 C++은 다중패러다임 프로그래밍 언어라고 불린다. 절차적 프로그래밍을 기본으로하여, 객체 지향, 함수식, 일반화 프로그래밍을 포함하며 메타프로그래밍 개념까지 지원하고 있다. 이렇게 복잡하게 여러가지의 개념이 얽혀있는 C++을 이해하기위한 가장 쉬우면서 정확한 방법은 C++을 단일 언어로 바라보는 눈을 넓혀, 상관관계가 있는 여러 언어들의 연합체로 바라보고 각각의 하위 언어에 관한 규칙을 각개격파 하는 것이다. C++의 하위언어는 네 가지..

[Thread] 스핀락(SpinLock)
SERVER/Multi-Thread2022. 9. 3. 17:53[Thread] 스핀락(SpinLock)

여러개의 스레드가 공유자원을 쓰고있을 때, 해당 공유자원이 있는 임계 영역(Critical Section)에 동시에 접근하게 되면, 공유 자원에 대한 접근이 어떤 순서로 이루어졌는지에 따라 실행 결과가 같지 않고 실행할때 마다 달라지는 경쟁 상태(Race Condition)이 발생하게 된다. 따라서 해당 문제를 해결하기 위해 한 스레드가 임계 영역에 접근하면 다른 스레드들은 이 스레드가 이용하는 동안 해당 임계영역에 접근 할 수 없도록, 즉 두 개 이상의 프로세스가 동시에 임계영역에 접근하는 것을 막하야하는데, 이를 상호 배제(Mutual Exclusion)라고 한다. 상호배제는 Lock을 통해 달성할 수 있는데, 이 글에서는 Lock을 구현하는 여러가지 방법중 스핀락(SpinLock)에 대해서 알아보고..

image