본문 바로가기

분류 전체보기86

C++ 11 : 열거타입 enum 요약 기존 C++ 의 enum은 type safe하지 않다. 즉, 형식이 안전하지 않다! 이에 반해 C++ 11에서 새로 나온 enum class는 type safe하다. 내용 1. 기존 enumeration C++ 11 이전에 enum은 다음과 같다. 아래 두가지 enum을 선언했다고 가정하자 typedef enum { APPLE, BANANA, KIWI, } eFruit; typedef enum { RED, YELLOW, GREEN, } eColor; int main( ) { eColor color = RED; eFruit fruit = APPLE; if( color == fruit ) ... } 문제가 되는 부분은 if ( color == fruit ) 부분이다. C++은 color 와 fruit을.. 2020. 8. 8.
C++ 11 : nullptr C++ 11에 nullptr은 왜 등장했을까? NULL은 사실 integer 0이다. NULL의 선언을 찾아보면 #define NULL 0L 이다. 사실 nullptr을 사용하는 것이 컴파일러 버전에 따라 의미가 있을 수도 있고 없을 수도 있기 때문에 포인터 변수의 경우 NULL 대신 nullptr을 사용하라고 강제할 순 없지만, 그럼에도 불구하고 nullptr을 사용하는 습관을 들이는 것이 좋다. 포인터 변수를 선언할 때 될 수 있으면 nullptr 로 초기화해주는 것이 좋다. 그래야 나중에 쓰레기 값으로 인한 런타임 메모리 오류*를 사전에 방지할 수 있다. 참고로, 포인터로 인해 발생하는 오류는 디버깅도 힘들다. * 포인터는 초기화를 하지 않아도 되고 중간에 가리키는 변수의 주소를 변경할 수 있으므로.. 2020. 8. 8.
C++ 11 : std::function 함수 객체? 함수면 함수고 객체면 객체인데, 함수 객체는 무엇인가 ? std::function은 C++11 표준 라이브러리의 한 템플릿으로, 함수 포인터 개념을 일반화한 것 이다. C++에서는 'Callable'들을 객체의 형태로 보관할 수 있는 std::funciton 이라는 클래스를 제공한다. C에서의 함수 포인터는 진짜 함수들만 보관할 수 있는 객체라고 보았다면, 이 std::function은 함수 뿐만 아니라 모든 Callable들을 보관할 수 있다. 그럼 Callable은 무엇인가? C++에서 호출 가능한 모든 것을 포괄해서 나타내는 것이다. C++에서 ()를 붙여서 호출할 수 있는 모든 것을 Callable이라고 한다. typedef struct _s_oper { void operator() ( int nA, int nB ) { std::cout 2020. 8. 8.
C++ 11 : auto_ptr auto_ptr은 객체의 소유권을 강조하는 스마트 포인터이나, 결론부터 말하자면 auto_ptr보다는 auto_ptr과는 유사하지만 auto_ptr의 결함을 해결하는 unique_ptr을 사용하는 것이 좋다 ( C++ 11 표준에서는 auto_ptr을 포함하지 않는다. 즉, 사용을 권고하지 않는다) 2020. 8. 8.
C++ 11 : unique_ptr #include #include #include struct BodyMass { int ID; float Weight; BodyMass(int id, float weight) : ID(id), Weight(weight) { std::cout 2020. 8. 8.
C++ 11 : shared_ptr // ConsoleApplication1.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다. // #include "pch.h" #include #include #include #include auto main() -> int { using namespace std; auto sp1 = shared_ptr{}; // shared_ptr 생성은 하였으나 아직까지는 가리키는 객체가 없음.(nullptr)현재 use_count = 0 if( sp1) cout 2020. 8. 8.