C++ 오버로딩과 오버라이딩
2021. 1. 24. 20:22
DevLog/C & C++
오버로딩(Overloading) : 함수 중복 정의 오버로딩은 같은 이름의 함수에 매개변수를 다르게 사용하여 매개 변수에 따라 다른 함수가 실행되는 것. 오버라이딩(Overriding) : 함수 재정의 오버라이딩은 상속받았을때 부모클래스의 함수를 사용하지 않고 다른 기능을 실행할때 함수를 자식클래스에 같은 이름, 매개변수로 재정의 해서 사용하는것. 오버로딩 : 심화 설명 메소드 이름이 같아야 한다. 리턴형이 같아도 되고 달라도 된다. 파라미터 개수가 달라야한다. 파라미터 개수가 같을 경우, 자료형이 달라야 한다. 객체 지향 프로그래밍에서 오버로딩(Overloading)은 같은 이름의 메소드를 여러개 중복 선언하는 것을 말합니다. C와 같은 기존언어에서는 같은 이름의 함수를 만들 수 없었습니다. 이것이 직..
C++ 가비지 컬렉션, 참조 카운트
2021. 1. 24. 14:38
DevLog/C & C++
자동 메모리 관리 std::shared_ptr를 배우기 전에, 자동 메모리 관리에 관해 알아야합니다. 주로 쓰는 두가지 기법이 있었습니다. 첫번째는 가비지 컬렉션이고, 두번째는 참조 카운팅이 있습니다. 가비지 컬렉션은 Java와 C#에서 활용되고 있으며, 참조 카운팅은 Swift와 오브젝트 C에서 지원됩니다. 가비지 컬렉션 보통 트레이싱 가비지 컬렉션을 의미합니다. 메모리 누수를 막으려는 시도에서 나오게 되었습니다. 주기적으로 컬렉션을 실행합니다. 충분한 여유 메모리가 없을 때 컬렉션이 실행됩니다. 스케쥴에 따라 또는 수동으로도 실행가능합니다. 매 주기마다 GC는 루트를 확인합니다. 즉, 전역 변수, 스택, 레지스터들을 확인합니다. 힙에 있는 개체에 루트를 통해 접근할 수 있는지 판단합니다. 접근할 수 ..
C++ 스마트포인터
2021. 1. 23. 15:19
DevLog/C & C++
스마트 포인터(Smart pointer) C++ 프로그램에서 new 키워드를 사용하여 동적으로 할당받은 메모리는, 반드시 delete 키워드를 사용하여 해제해야 합니다. C++에서는 메모리 누수(memory leak)로부터 프로그램의 안전성을 보장하기 위해 스마트 포인터를 제공하고 있습니다. 스마트 포인터(smart pointer)란 포인터처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해 줍니다. 스마트 포인터의 동작 보통 new 키워드를 이용해 기본 포인터(raw pointer)가 실제 메모리를 가리키도록 초기화한 후에, 기본 포인터를 스마트 포인터에 대입하여 사용합니다. 이렇게 정의된 스마트 포인터의 수명이 다하면, 소멸자는 delete 키워드를 사용하여 할당된 메모리를 자동으로..
C++ 다형성과 가상함수
2021. 1. 22. 22:39
DevLog/C & C++
다형성(Polymorphism)이란? 다형성(Polymorphism)은 OOP(Object Oriented Programming)의 개념을 설명할 때 추상화(Abstaction)과 더불어 가장 중요하게 등장하는 용어이다. 다형성은 여러 개의 서로 다른 객체가 동일한 기능을 서로 다른 방법으로 처리 할 수 있는 기능을 의미한다. 예를 들어 칼, 대포, 총 등의 무기들은 공통적으로 '공격'이라는 동일한 기능을 다르게 수행할 수 있다. 따라서 무기 객체에서 attack() 함수를 실질적으로 구현할 필요없이 추상 클래스(Abstract Class)로 구현하면 효과적으로 설계를 할 수 있다. 오버라이딩 문제 자식 클래스에서 멤버 함수를 재정의하여 사용하는 것은 일반적으로 잘 동작하나 포인터 변수로 객체에 접근할 ..
C++ inline, __inline, __forceinline란?
2021. 1. 18. 22:35
DevLog/C & C++
inline inline 키워드는 함수 호출 시 발생하는 오버헤드를 줄이기 위해 함수를 호출하는 대신 함수가 호출되는 곳마다 함수의 코드를 복사해 넣어주는 방법이다. 그렇다면 함수 호출 시 발생하는 오버헤드는 뭘까? 실제로 함수가 호출되는 과정을 요약하면 함수의 인자를 스택에 저장 함수가 리턴될 때 돌아올 주소를 스택이나 레지스터에 저장 함수의 시작 주소로 점프 함수의 코드 실행 함수에서 만들어진 지역변수, 스택에 저장된 인자 해제, 리턴 값을 레지스터에 저장 함수를 호출 할 때 저장해둔 주소로 되돌아감 위와 같은 과정을 거치는데 간단한 함수를 호출하기 위해서 저런 명령어들을 수행해야 한다면 오버헤드가 될 수밖에 없다. 이런 오버 헤드를 줄이기 위해 C++에서는 inline이라는 키워드를 제공한다. 그림..
Visual Assist 한글 주석 빨간줄 제거 방법
2018. 1. 15. 18:14
DevLog/C & C++
Visual Assist 한글 주석 빨간줄 제거 방법 VS실행 -> 메뉴 : VAssisX -> Visual Assist X Options -> Advanced -> Underlines -> Underline spelling errors in comments and strings using 체크해제 -> 확인 한글 주석에 빨간줄이 생성되어 있어서 Productivity Power Tools 이라는 이클립스 처럼 스크롤 바에 에러 위치를 표시해주는 툴과 같이 쓸 때 문제되는 현상이 사라지게 된다.