공부/C || C++ 43

복사생성자란(copy constructor)?

1학년때 C++를 배울때 copy constructor를 처음 접했을땐 어려워서 열심히 공부해서 겨우겨우 이해해서 시험친 기억이 난다. 그때 기억으로는 다 이해했고 안까먹을거라 생각하고 넘어갔지만 막상 몇년이 지나니 까먹은 것 같아서 이 기회에 다시 정리한다. 1. 왜 써야 하는가? 우선 copy constructor라는걸 왜 써야하는지에 대한 의문은 쓰지 않았을 때 생기는 문제에 대해 생각해보면 쉽게 해결된다. 예를 들어 다음와 같은 코드가 있다고 하자 class person { int m_tAge; char* m_pName; public: person() { } person(int _age, char* _name) { m_tAge = _age; m_pName = new char[strlen(_name..

공부/C || C++ 2021.07.05

C++11 가변 인자 함수 템플릿(variadic template)

#define va_start(ap, v) ( (ap) = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) ) 사실 가변 인자 함수 템플릿이란 용어는 winapi 강의를 들으면서 처음 접해보는 단어였다. 그때는 이렇게 쓰면 되는구나~ 하고 넘어 갔는데 이번 기회에 좀 더 자세히 정리해보고자 한다. 사실 가변 인자 함수 템플릿 전에 가변 인자 함수라는 것을 알아보자. 가변 인자 함수는 말 그대로 함수의 인자 갯수가 1개부터 여러개가 될 수 있도록 정의 하는 개념을 의미한다. C에서 printf 함수를 예로 많이 든다. printf("%d\n", 3); printf("%d, %d\n", 3, 4); printf("%d, %d, %d\n", 3, 4, 5); printf("%d, %d, ..

공부/C || C++ 2021.07.04

C++ 11 - Rvalue reference

C++ 11에는 내가 몰랐던, 혹은 사용하는지도 몰랐던 여러가지 syntax들과 기능들이 있었다. 이번 기회에 정리해보면 좋을 것 같다. 이번 글에서는 Rvalue reference에 대해서 알아보자 먼저 Rvalue가 뭔지부터 알아보자. 이름만 보면 우측값인데 그런 의미 보다는 C++에서는 임시로 생성됐다가 바로 없어지는 값을 의미한다. Rvalue가 있으면 Lvalue도 있을텐데 Lvalue는 반대로 표현식 이후 scope내에서 다시 사용 가능한 값을 의미한다. 코드로 예를 들어보면 int a = 3 + 4; // 3+4는 rvalue int b = 10; // 10은 rvalue int sum = a+b; // a+b는 rvalue int *p = &a; // &a는 표현식이 종료되면 더 이상 참조..

공부/C || C++ 2021.07.03