C++ 8

Dangling Pointer

Dangling Pointer ? 적절한 타입의 유효한 객체를 가리키고 있지 않는 포인터이다. 메모리가 해제 된 곳을 가리키고 있는 포인터이다. 발생하는 상황 객체에 대한 참조가 포인터 값에 대한 수정 없이 삭제되거나 할당 해제돼서 포인터가 계속 할당 해제된 메모리를 가리킬 때이다. 기존 프로그램이 Dangling pointer를 역참조하면 메모리는 전혀 다른 데이터를 갖고 있을 것이므로 예측할 수 없는 행동이 발생한다. 포인터가 알려진 상태로 초기화되기 전에 사용될 때 발생한다. 프로그램이 허상 포인터가 가리키는 메모리에 쓰기를 하면 관련되지 않은 데이터의 오염이 발생하게 된다. 리눅스, 유닉스의 경우에는 세그멘테이션 오류가 발생한다. 윈도우의 경우에는 일반 보호 오류가 발생한다. 객체 지향 프로그래밍..

C++ STL 벡터, 리스트, 덱 비교

C++ STL 벡터, 리스트, 덱 비교 개인적으로 까먹지 않으려고 적어두는 글. 벡터 vector v; // 컴파일러 버전에 따라 vector v;로 써야 인식이 되는 경우도 있다. vector v; 1) Vector 특징 배열과 유사하다. 배열의 크기는 고정이지만, 벡터의 크기는 동적으로 변한다. 중간에 데이터 삽입, 삭제가 용이하지 않다. 데이터를 순차적으로 저장한다. 검색 속도가 느리다. 랜덤 접근이 용이하다. 2) Vector를 사용해야 하는 경우 중간의 데이터 삽입이나 삭제가 없을 경우 순차적으로 저장된 데이터를 빈번하게 검색하지 않을 경우 특정 데이터가 저장된 위치를 파악하여 랜덤 접근할 경우 ex) v [5] 3) 장점 개별 원소들을 인덱스로 접근이 가능하다. 원소를 컨테이너의 끝에 삽입 /..

복사 생성자

복사 생성자란? 멤버 대 멤버 복사를 실행한다. 복사 생성자를 정의하지 않으면 멤버 대 멤버의 복사를 진행하는 디폴트 복사 생성자가 자동으로 삽입된다. class Point { private: int x; int y; public: Point(int x, int y) : x(x), y(y) { } // 디폴트 생성자 Point(const Point &copy) : x(copy.x), y(copy.y){ } // 디폴트 복사 생성자 }; 깊은 복사와 얕은 복사 얕은 복사 멤버변수의 멤버 대 멤버 복사만 실행한다. Person man1("Kang", 29); Person man2 = man1; 깊은 복사 메모리 공간 할당 후 문자열 복사 할당된 메모리의 주소 값을 멤버에 저장한다. Person(const P..

캡슐화와 const 함수

정보 은닉 멤버변수를 private으로 선언하고 해당 변수에 접근하는 함수를 별도로 정의하여 안전한 형태로 멤버변수의 접근을 유도하는 것이다. 클래스 외부에서의 멤버변수 접근을 목적으로 정의되는 함수들을 엑세스 함수(access function)라 한다. 제한된 방법으로의 접근만 허용을 해서 잘못된 값이 저장되지 않도록 도와야 하고 실수를 했을 때 발견되도록 한다. class Point { private: int xpos; int ypos; public: // 엑세스 함수 int GetXpos() const { return xpos; } void SetXpos(int x) { xpos=x; } int GetYpos() const { return ypos; } void SetYpos(int y) { ypo..

C언어 기반의 C++ 2

const와 포인터 const의 의미 // int형 변수 num을 상수화 const int num = 10; // 상수만을 가리키는 포인터. 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없다. // 가리키는 대상은 변경이 가능하지만(ptr1=&val2;), 가리키는 값은 변경할 수 없다. const int * ptr1 = &val; // 포인터 ptr2가 상수화 된다. 정수형 변수를 가리키는 상수형 포인터. // 포인터가 가리키는 대상은 변경할 수 없고, 가리키는 값은 변경이 가능하다(*ptr2=100;) int * const ptr2 = &val; // 가리키는 대상 및 값의 변경이 불가능하다. // 포인터 ptr3가 상수화 되었으며, ptr3를 이용해서 val3의 값을 변경할 수 없다. co..

언리얼엔진 컨테이너 종류

TArray, TSet, TMap 정리 TArray 기본 FString Arr[] = { TEXT("of"), TEXT("Tomorrow") }; StrArr.Append(Arr, ARRAY_COUNT(Arr)); StrArr == ["Hello","World","of","Tomorrow"] TArray IntArray; = 연산으로 복사 할 수 있다. 각종 함수 Append는 다른 TArray 또는 일반 배열로의 포인터 및 해당 배열의 크기에 다수의 엘리먼트를 한꺼번에 추가한다. Append 함수 대신 +=를 통해 배열을 연결시킬 수 있다. AddUnique는 기존 컨테이너에 동일한 요소가 이미 존재하지 않는 경우 새 요소만 추가한다. Insert는 Add, Emplace, Append 처럼 단일 엘리..