반응형 개발/C, C++67 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. C++ - 가상 소멸자 (Virtual Destructor) C, C++ 전체 링크 virtual 예시에서 사용한 코드에서 소멸자를 추가한 후, foodList의 메모리를 해제해보자. 각 class에 생성자를 추가하고 foodList[0]은 new FOOD로 수정하였다. #include #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. 8. 23. C++ - explicit 키워드 C, C++ 전체 링크 아래의 코드를 실행해보자. #include #include using namespace std; class TEST { public: int value1; TEST() : value1(0) { cout 2021. 8. 22. C++ - virtual, type casting C, C++ 전체 링크 이전 글에서 다시 virtual 키워드를 지우고, main을 아래와 같이 작성해보자. FOOD type에 MILK로 객체를 생성한 후, SNACK으로 type casting하여 printName을 호출한다. #include #include using namespace std; class FOOD { private: int price = 0; public: void printName() { cout 2021. 8. 15. C++ - virtual 키워드 C, C++ 전체 링크 아래의 클래스를 보자. SNACK과 MILK 클래스는 FOOD 클래스를 상속한다. #include #include using namespace std; class FOOD { private: int price = 0; public: void printName() { cout printPrice(); foodList[i]->printLine(); } return 0; } 출력결과는 예상과 다르다. foodList의 원래 형태는 FOOD class지만, 실제 객체는 SNACK이나 MILK가 된다. 그러나 FOOD의 printName과 printPrice가 실행되었다. 즉, 형변환이 이루어진 포인터 변수는 원래 형태(부모)의 함수를 호출하게 된다. virtual을 이용하면 형변환이 이루.. 2021. 8. 14. C++ - 복사 생성자를 이용한 객체의 깊은 복사 (Deep Copy using Copy Constructor) C, C++ 전체 링크 링크의 코드에 setValue를 추가하고 아래의 코드를 실행해보자. #include #include using namespace std; class TEST { public: int value1; int value2; TEST() : value1(1), value2(2) { cout 2021. 8. 10. 이전 1 2 3 4 5 6 7 8 다음 반응형