반응형 C++93 C++ - 임시 객체 (temporary object) C, C++ 전체 링크 FOOD 클래스를 반환하는 함수에 대해 아래의 결과를 보자. #include #include #include using namespace std; class FOOD { private: int price = 0; public: FOOD(int p) : price(p) { printf("FOOD created, price : %d\n", price); } ~FOOD() { printf("FOOD deleted, price : %d\n", price); } FOOD(const FOOD& food) /* 복사 생성자 */ :price(food.price) { printf("FOOD copy, price : %d\n", price); } FOOD& operator=(const FOOD& .. 2021. 10. 27. C++ - 우측값 참조 r-value reference (기본 자료형) C, C++ 전체 링크 C++11 부터 r-value에 대한 참조가 가능하다. r-value는 &&가 붙게 된다. r-value 참조를 이용하면 아래와 같은 경우에 대한 모호성을 해결할 수 있다. #include #include using namespace std; void overloadingTest01(int value) { cout 2021. 10. 25. C++ 스마트 포인터 : unique_ptr C, C++ 전체 링크 참고 - 전략 패턴 (Strategy Pattern) unique_ptr는 하나의 포인터만 허용하도록 하는 스마트 포인터다. unique_ptr는 해당 자원에 대한 유일한 소유권을 가지는 특징 덕분에 메모리 누수를 방지하고 자원 관리를 간편하게 해준다. (RAII, Resource Acquisition Is Initialization 객체가 소멸될 때, 자동으로 해당 메모리가 해제된다.) unique_ptr는 얕은 복사가 발생할 가능성을 사전에 차단한다. 즉, 오직 하나의 포인터만 존재할 수 있도록 한다. 여러 포인터가 동시에 하나를 가르킬 수 없도록 막는다. 따라서 아래의 myFood를 선언한 후, unqFood가 myFood를 가르키게 하는 것은 모두 컴파일 에러다. uniqu.. 2021. 10. 16. C++ 스마트 포인터 : weak_ptr C, C++ 전체 링크 shared_ptr처럼 가리키는 대상에 참조 형식으로 포인팅하지만, counter에 영향을 주지 않는다. 그리고 weak_ptr이 소멸하더라도 대상 객체를 삭제하지 않는다. shared_ptr을 사용해야하지만 counter는 하지 않을 때 필요하다. FOOD 클래스에 어울리는 음식을 set하는 기능이 추가되었다고 하자. setWithFood는 shared_ptr의 객체를 받아 withFood에 설정한다. #include #include // shared_ptr, weak_ptr header #include using namespace std; class FOOD { private: int price = 0; shared_ptr withFood; public: FOOD() { pri.. 2021. 10. 14. C++ 스마트 포인터 : shared_ptr C, C++ 전체 링크 shared_ptr은 포인팅 횟수를 계산해서 0이 되면 객체를 소멸하는 스마트 포인터이다. 아래 코드의 결과를 확인해보자. #include #include // shared_ptr header #include using namespace std; class FOOD { private: int price = 0; public: FOOD() { printf("FOOD created\n"); } ~FOOD() { printf("FOOD deleted\n"); } virtual void printName() { cout 2021. 10. 12. C++ 스마트 포인터 : auto_ptr C, C++ 전체 링크 auto_ptr은 동적 할당한 인스턴스를 자동으로 삭제하는 스마트 포인터지만, 사용하지 않는 것이 바람직하다. 배열에 대한 기능을 지원하지 않고, 얕은 복사에 대해 문제가 있다. auto_ptr을 사용하기 위해서는 memory header가 필요하다. 이제 아래 코드를 실행해보자. #include #include // auto_ptr header #include using namespace std; class FOOD { private: int price = 0; public: FOOD() { printf("FOOD created\n"); } ~FOOD() { printf("FOOD deleted\n"); } virtual void printName() { cout 2021. 10. 10. C++ 스마트 포인터 (Smart Pointer) C, C++ 전체 링크 스마트 포인터는 동적 할당한 메모리를 자동으로 해제해주는 편리한 포인터다. auto_ptr 동적 할당한 인스턴스를 자동으로 삭제 shared_ptr 포인팅 횟수가 0이 되면 삭제 weak_ptr counting 하지 않은 shared_ptr unique_ptr 하나의 포인터만 허용 2021. 10. 3. C++ - 형변환 연산자 (casting operators) C, C++ 전체 링크 static_cast 컴파일 시 형변환 dynamic_cast 런타임 시 형변환 const_cast 상수형 포인터에서 const 제한을 제거 reinterpret_cast C의 형변환과 유사 static_cast static_cast는 형변환이 적절한지 컴파일 시 체크한다. 즉, 적절한 형변환이 아니면 강제로 형식을 변환하지 않는다. 링크에서는 TEST class에서 (int) 변환에 대한 type casting을 정의해줬으므로 적절환 형변환이 가능했고, static_cast로 형변환이 적절하다고 판단할 수 있다. static_cast는 파생 클래스의 형식을 기본 형식(부모 클래스)으로 캐스팅하는 것을 허용한다. 이전 예제에서 아래의 코드를 추가해서 실행해보자. #include #.. 2021. 8. 26. C++ - virtual / override 키워드 C, C++ 전체 링크 아래의 FOOD class와 상속 받은 SNACK class를 보자. class FOOD { private: int price = 0; public: FOOD() { printf("FOOD created\n"); } ~FOOD() { printf("FOOD deleted\n"); } virtual void printName() { cout 2021. 8. 25. 이전 1 ··· 5 6 7 8 9 10 11 다음 반응형