본문 바로가기

C,C++14

C++ 스마트 포인터 ( shared_ptr, make_shared ) 스마트 포인터 #include c++11부터 지원 c++에서는 "메모리 누수"로부터 프로그램의 안정성을 보장하기 위해 스마트 포인터를 제공한다. 스마트 포인터는 생성하면 힙 메모리에 올라간다. (동적할당한다고 보면 됨) 스마트 포인터는 사용이 끝난 메모리를 자동으로 해제해 준다. 스마트 포인터의 동작 보통 new를 사용해 기본 포인터가 실제 메모리를 가리키도록 초기화한 후에, 기본 포인터를 스마트 포인터에 대입하여 사용한다. ➡️ new가 반환하는 주소값을 스마트 포인터에 대입하면 따로 메모리를 해제할 필요가 없다!! 스마트 포인터의 종류 3가지 unique_ptr shared_ptr weak_ptr shared_ptr 하나의 특정 객체를 참조하는 스마트 포인터가 총 몇개인지를 참조하는.. 2022. 4. 10.
C++ 범위 지정 연산자(::)와 namespace 범위 지정 연산자 ( :: ) 함수나 변수명 등을 namespace에 따라 구분할 때 사용 namespace 영역이라는 말 그대로 변수나 함수들이 선언된 범위, 묶음 이라고 생각하면 된다. 사용법 #include #include using namespace std; namespace A{ int test = 2; void hello(){ cout 2022. 4. 10.
C++ 멤버 초기화 리스트 클래스 멤버변수 초기화 리스트 사용 방법 생성자 괄호() 뒤에 콜론(:)으로 표기한다. 초기화 할 멤버 변수들을 쉼표로 구변하여 표기한다. 소괄호()를 이용해서 멤버 변수를 초기화한다. 사용법 예시1) #include #include using namespace std; class Car { private: string name; int number; bool inSuv; public: Car() : name("kdy"), number(1212), inSuv(false) { cout 2022. 4. 10.
C++ 가상 함수(virtual function) 가상 함수 부모를 상속받은 자식 클래스에서 "재정의할 것"으로 기대하고 정해놓은 함수 자식 클래스에서 가상함수를 재정의하면 이전에 정의되었던 내용들은 모두 새롭게 정의된 내용들로 교체된다. 부모 클래스에서 virtual 키워드를 사용해 가상 함수를 선언하면 자식 클래스에서 재정의된 멤버함수도 자동으로 가상 함수가 된다. 사용법 멤버함수 앞에 virtual을 붙이면 된다. 가상 함수 호출 방식 c++ 에서는 가상 함수가 아닌 일반적인 멤버 함수들의 호출은 컴파일 할 때 고정된 메모리 주소로 변환된다. ➡️ 정적 바인딩 가상 함수를 호출할 때는 컴파일러가 어떤 함수를 호출해야 하는지 미리 알 수 없다. 왜냐하면, 가상 함수는 프로그램이 실행될 때(런타임 때) 객체를 결정하므로 컴파일 타임에 해당 객체를 특정.. 2022. 4. 9.
c++에서 string 클래스를 이용한 문자열 사용 ( getline() ) getline() #include #include using namespace std; int main(){ string name; cout 2022. 3. 12.
배열의 크기를 넘어가서 사용할 경우 1. 배열 색인의 유효성 체크 char str[8]; 이 경우 str 배열의 범위를 벗어난 str[8]을 사용하여 값을 대입하면 어떤 일이 발생할까? [ 문법 오류가 아니다. ] - str[8]이라는 표현은 배열 문법이긴 하지만 메모리 주소를 표현하는 하나의 형식이기 때문에 컴파일러는 해당 주소에 대한 유효성 검사를 하지 않는다. 따라서 str[8]이 명백하게 str 배열의 범위를 벗어났다고 해도 컴파일러는 이 명령문에 대해 오류 처리를 하지 않는다. - 이런 경우 오류 처리를 하지 않기 때문에 컴파일이 잘 된다. 하지만 프로그램의 메모리 할당 구조에 따라 운 좋게 아무 문제 없이 동작하거나, 오류가 나서 프로그램이 중단되거나 혹은 오류는 발생하지 않지만 원하는 결과가 나오지 않는 경우가 생길 수 있다... 2022. 2. 14.