개발/C, C++ 48

DALi code review - C++ 코드리딩, 람다 코드 이해하기

문제가 와서 보게 된 코드. 해결 패치가 왔지만 이해되지 않는다. 수정 내용은 대략 아래와 같음. 먼저 처음 코드부터 보자. EraseIf()의 인자로 넘겨주는 값이 이상하다. 이것은 람다 표현식이라고 한다. 대략 이러한 모습 이렇게 4가지 형태로 이루어져 있다. 각각 개시자(introducer), 인자(parameters), 반환타입(return type), 함수의 몸톰(statement)라고 한다. 아 이제 넘겨주는 인자의 형태가 보인다. 1) [] : 개시자(introducer) 2) (auto& animator) : 인자(parameters) 3) -> : 없음, 리턴타입이 void일 경우 생략 가능. 4) {return animator->Orphan();} : 함수의 몸톰. 좀더 쉬운 형태의 람..

개발/C, C++ 2021.02.03

[C++] std::remove & std::remove_if 이해하기

template ForwardIterator remove(ForwardIterator first, ForwardIterator last, const T& val); template ForwardIt remove_if( ForwardIt first, ForwardIt last, UnaryPredicate p ); - remove : 범위(first~last)내에서 val과 일치하는 원소를 제거한 범위로 변환 - remove_if : 범위(first~last)내에서 조건 p를 만족하는 원소를 제거한 범위로 변환. -> 이 함수는 실제 원소를 제거하는 것이 아닌 지워야 하는 원소들을 컨테이너 맨 뒤로 보내버린다. ** 이때 이 두 함수는..

개발/C, C++ 2021.02.02

[C++] 템플릿(Template)에 대한 이해와 함수 템플릿

함수 템플릿함수를 만드는 도구, 다양한 자료형의 함수를 만들어 낼 수 있다.1234int Add(int num1, int num2){ return num1 + num2;}cs - 위 함수의 기능 : 덧셈 - 대상 자료형 : int형 데이터위 함수를 템플릿 함수로 변경하자.12345template T Add(T num1, T num2){ return num1 + num2;}cs - template : 이는 T라는 이름을 이용해서 아래에 선언된 함수를 템플릿으로 정의한다는 의미이다. - int을 T로 선언 : T는 자료형을 결정짓지 않겠다는 의미로 사용한 것, 그래서 나중에 T를 대신해서 실제 자료형을 결정한다.* typename을 대신해서 class를 사용해도 된다. 이 둘은 같은 의미이다. T대신 다른 ..

개발/C, C++ 2019.03.10

[C++]new, delete 연산자 오버로딩

new 연산자 오버로딩Point * ptr = new Point(3, 4);기본적으로 제공되는 new 연산자가 하는 일 1) 메모리 공간의 할당 2) 생성자의 호출 3) 할당하고자 하는 자료형에 맞게 반환된 주소 값의 형 변환* 이중 3)번의 일을 수행함으로써 C에서 사용하던 malloc과 달리 new 연산자가 반환하는 주소값을 형변환할필요가 없게 된다. 기본적으로 제공되는 new 연산자가 하는 일은 위 3가지이고, 우리가 new 연산자를 오버로딩할 경우엔 위 세가지 작업중 1번에 해당하는 메모리 공간의 할당만 구현하면 된다. *new 연산자 오버로딩은 아래와 같이 오버로딩 하도록 되어있다. - 반드시 void 포인터 형 반환 - 매개변수형은 size_t Point * ptr = new Point(3,4..

개발/C, C++ 2019.01.13

[C++] 연산자 오버로딩 - 디폴트 대입 연산자

대입 연산자의 특징 - 정의하지 않으면 디폴트 대입 연산자가 삽입된다. - 디폴트 대입 연산자는 멤버 대 멤버의 복사(얕은 복사)를 진행한다. - 연산자 내에서 동적 할당을 한다면, 그리고 깊은 복사가 필요하다면 직접 정의해야 한다.*객체간의 대입연산은 C언어의 구조체 변수간의 대입연산과는 본질적으로 다르다. 이는 단순한 대입연산이 아닌, 대입 연산자를 오버로딩 한 함수의 호출이기 때문이다. 디폴트 대입 연산자의 문제점- 디폴트 복사 생성자의 문제점과 유사하다. 디폴트 대입 연산자는 멤버 대 멤버를 단순히 복사만 하게 된다.-> 깊은 복사를 진행하도록 정의, 메모리 누수가 발생하지 않도록, 깊은 복사에 앞서 메모리 해제의 과정을 거친다.123456789Person& operator=(const Perso..

개발/C, C++ 2019.01.12

[C++] 단항 연산자 오버로딩

대표적인 단항 연산자 - 1 증가 연산자 : ++ - 1 감소 연산자 : -- ++pos;-> operator++()의 함수형태로 오버로딩 되어 있다. 멤버함수인 경우 operator++()의 형태, 전역함수의 경우 operator++(Point& ref)의 형태이다.아래와 같이 구현되어있다.1234567891011121314Point& operator++(){ xpos+=1; ypos+=1; return *this;} Point& operator--(){ xpos-=1; ypos-=1; return *this;} cs-> this는 객체 자신의 포인터 값을 의미한다. 즉, 위 함수에서 객체 자신을 참조형으로 반환한다. 그렇기 때문에 객체 자신의 복사본을 만들어 반환하게 된다. 그래서 아래의 형태도 가능..

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