개인공부/C++(44)
-
스마트 포인터 공부 1
RAII Rsource Acquisition Is Initialize (RAII) 자원 획득을 초기화 한다 ! RAII는 C++ 설계 패턴중인 하나인 키워드로 자원 관리를 스택에 할당한 객체를 통해서 수행하는 것이다. 스택에서 객체를 잡아두고 스택메모리가 해제되면 자동으로 메모리 해제를 하는 방식의 설계인거 같다. unique_ptr C++ 에서 메모리를 잘못된 방식으로 관리하였을때 크게 두 가지 종류의 문제점이 발생하는데 첫번째는 메모리를 사용한 후에 해제하지 않는 경우와 이미 해제된 메모리를 다시 참조하는 문제점이 있다. 이러한 문제가 발생한 이유는 만들어진 객체의 소유권이 명확하지 않아인데 우리가 어떤 포인터에 객체의 유일한 소유권을 부여해서, 이 포인터 말고는 객체를 소멸시킬 수 없다! 라고 한다..
2023.07.27 -
멀티 쓰레드
쓰레드 사용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 // 첫 쓰레드 #include #include using std::thread; void func1(){ for (int i = 0; i
2023.07.24 -
sizeof 2023.03.30
-
const, static 정리
생성자의 초기화 리스트(initalizer list) 예전 강의에서 만들었던 클래스와 달라진 것은 딱 하나 있는데, 바로 생성자에서 무언가 특이한 것을 도입했다는 것이다. {} 이전에 초기화 리스트가 있으며, 생성자 호출과 동시에 멤벼 션수들을 초기화해주게 됩니다. 만약에 멤버변수와 생성자 인자의 이름이 같아도 정상적으로 초기화해준다. 이것은 바깥쪽은 무조건 멤버변수를 지칭하고 괄호안은 인자로 받은 변수를 지칭하기 때문이다. 그렇다면, 초기화 리스를 사용하는 이유는 ? 초기화 리스를 사용한 버전의 경우 생성과 초기화를 동시에 하게 된다. 반면에 초기화 리스트를 사용하지 않는다면 생성을 먼저 하고 그 다음에 대입을 수행하게 됩니다. 이러한 초기화 리스트는 '생성과 동시에 초기화 되어야 하는 것들' 레퍼런스..
2023.03.21 -
복사 생성자, 소멸자 정리
new와 malloc의 차이점 new와 malloc 모두 동적으로 할당하지만 '무언가' 다르다고 했었는데, 바로 new의 경우 객체를 동적으로 생성하면서와 동시에 자동으로 생성자도 호출핸다는 점이다. 소멸자(Destructor) 만약에 name 을 동적으로 생성해서 문자열을 복사하였는데, 이렇게 동적으로 할당된 char 배열에 대한 delete는 언제 이루어지는 것인가요? 명확하게 delete를 지정하지 않은 한 자동으로 delete 가 되는 경우는 없다. 다시 말해서 동적으로 할당했던 저 name 은 영원히 메모리 공간 속에서 둥둥 떠다닌다는 말이다. 위와 같은 name들이 쌓이고 쌓이게 되면 메모리 누수(Memory Leak)이라는 문제점이 발생하게 된다. 이러한 문제점을 해결하기 위해서 소멸자를 사..
2023.03.20 -
함수의 오버로딩, 생성자 정리
함수의 오버로딩 (Overloading) 객체 지향 프로그래밍을 시작하기에 앞서 C++에 C와는 다른 새로운 기능이 있는데 바로 함수 오버로딩이다. C++에서는 같은 이름의 함수를 호출했을 때 사용하는 인자를 보고 구분해 준다. 즉 C++에서는 함수의 이름이 같더라도 인자가 다르면 다른 함수라고 판단하기 때문에 오류가 발생하지 않는다. C++ 컴파일러에서 함수를 오버로딩하는 과정 1. 자신과 타입이 정확히 일치하는 함수를 찾는다. 2. 정확히 일치하는 타입이 없는 경우 아래와 같은 형변환을 통해서 일치하는 함수를 찾아본다. * char, unsigned char, short 는 int로 변환된다. * unsignde short 는 int의 크기에 따라 int 혹은 unsigned int로 변환된다. *f..
2023.03.19