전체 글
[C++] C++11 override, final
[C++] C++11 override, final
2022.03.28C++11 에 override 와 final 키워드가 추가되었다. 아래의 코드를 보도록 하자. 1. override #include class EntityBase { public: virtual void Print() { std::cout
[C++] new[] , delete[] 오버로딩시 주의 사항.
[C++] new[] , delete[] 오버로딩시 주의 사항.
2022.03.281. 연산자 vs CRT 함수 동적할당이라는 단어에 대해서 잘 생각해보아야 한다.우리가 힙이라고 부르는 것은 풀어쓴다면 다음과 같다. "스택 프레임과 별개로 프로그래머가 내킬때 해제할 물리메모리" 동적 할당은 OS자원에 대한 요청이다. OS에게 "스택 프레임과 별개로 프로그래머가 내킬때 해제할 물리메모리" 에 대한 요청을 한다. OS에게 물리메모리에 사용에 대한 허락을 받으면,우리는 힙에 할당되었다고 이야기 하는 것이다. 핵심은 new와 delete는 연산자이고 malloc 과 free는 CRT 함수이다. new와 delete가 연산자라는 말은, 어디까지나 C++ 컴파일러가 인식하는 키워드 라는 것이다. 컴파일러는 new와 delete를 발견하면 일련의 기계어 동작으로 해석해낸다. 그리고 그 일련의 기계..
[C++] const lvalue reference, rvalue reference
[C++] const lvalue reference, rvalue reference
2022.03.23C++11에 std::move 그리고 std::forward 가 추가 되었다. 우선 lvalue와 rvalue 의 개념을 이해해야 제대로 사용할 수 있을 것 같아 정리하기로 한다. 1. lvalue lvalue는 이름이 있는 값이다. 그러니까, C++ 코드에서 변수명을 정한 값이 바로 lvalue이다. 글로 표현할수록 오개념이 생길 수 있다. 아래의 아주 간단한 코드를 보도록 하자. int IamInt = 10; //IamInt는 lvalue이다. //이름에서 알 수 있듯 대입시에 좌측에 위치한다. //IamInt 라는 이름을 가졌기 때문에, 이 곳으로의 값의 복사는 //위 처럼 간단하게 가능하다. 아주 쉽다. 우선은 우리가 아는 variable 의 개념이 lvalue라고 이해하자. 하나의 예시를 더 보..
[C++] C++11 constexpr
[C++] C++11 constexpr
2022.03.20상수는 어떤 특징을 가지는가? 컴파일타임에 약속되고, 절대 변하지 않는다는 보장이 있어야 한다. 이러한 점을 컴파일러에게 알려주는 키워드가 바로 constexpr이다. 기존 const가 있는데 왜 constexpr이 따로 생겼나요? 아래의 예시를 보도록하자. 1. const #include int main() { //const std::size_t Size = 10; //int Array[Size]; //가능. //초기화 이후 바뀌지 않는다. //그렇다면 만약 ? const std::size_t Size = 10; size_t* Casted = const_cast(&Size); *Casted = 50; int Array[Size]; std::cout
[C++] 스마트 포인터 unique_ptr, shared_ptr, weak_ptr
[C++] 스마트 포인터 unique_ptr, shared_ptr, weak_ptr
2022.03.19C+11에 템플릿으로 구현된 세가지의 스마트포인터 unique_ptr, shared_ptr, weak_ptr가 추가되었다. 아마도 가장 많이 사용하고 있지 않은가 싶다. 특히나 C++로 게임을 만드려고 한다면 객체의 생명주기 관리를 위해 잘 알아두는 것이 좋겠다. 1. unique_ptr 대입 연산자를 막아버렸다. 의도는 명확하다. 다른곳에서 참조하지 말라는 의미다. 물론 get을 호출하면 raw pointer를 얻을 수 있다. 그럼 사실상 무의미 해진다. #include #include class MyInstance { public: void operator delete(void* pAddress) { std::cout