분류 전체보기 153

[Effective C++] Item6_컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자

Item6_컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자챕터 핵심 내용컴파일러에서 자동으로 제공하는 기능을 허용하지 않으려면, 대응되는 멤버 함수를 private으로 선언한 후에 구현을 하지 말자.- 컴파일러에서 자동으로 제공하는 기능을 허용하지 않으려면, 대응되는 멤버 함수를 private으로 선언한 후에 구현을 하지 말자사본을 만드는 행위가 필요하지 않다면 복사 생성자와 복사 대입 연산자를 private 접근으로 만들어 버리자.프렌드 함수의 접근도 막으려면 선언만 하고 구현을 하지 말자.링크 시점 오류를 컴파일 시점 오류로 옮기고 싶다면 인터페이스 형식처럼 만들어 private 상속을 이용하는 방식으로 구현할 수 있다.후기(postscript)C++11부터는 클래스 메소드에..

카테고리 없음 2018.01.25

[Effective C++] Item5_C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자

Item5_C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자챕터 핵심 내용컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.- 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.기본 생성자는 생성자 함수가 아무것도 없을 시 자동으로 생성된다.복사 생성자, 복사 대입 연산자가 정의되어 있지 않은 상태에서 대입이나 복사를 시도한다면, 컴파일러에 의해 자동으로 생성된다.소멸자를 정의하지 않을 시 자동으로 생성된다.컴파일러에 의해 만들어진 합성 함수는 모두 기본형이고, public에 inline이다.후기(postscript)C++11부터는 이동 의..

카테고리 없음 2018.01.25

[Effective C++] Item4_객체를 사용하기 전에 반드시 그 객체를 초기화하자

Item4_객체를 사용하기 전에 반드시 그 객체를 초기화하자챕터 핵심 내용기본제공 타입의 객체는 직접 손으로 초기화 하자. 경우에 따라 저절로 되기도 하고 안되기도 하기 때문이다.생성자에서는, 멤버 초기화 리스트를 사용하자. 그리고 초기화 리스트에 멤버를 나열할 때는 클래스에 각 데이터 멤버가 선언된 순서와 똑같이 나열하자.여러 번역 단위에 있는 비지역 정적 객체들의 초기화 순서 문제는 피해서 설계하자. 비지역 정적 객체를 지역 정적 객체로 바꾸면 된다.- 기본제공 타입의 객체는 직접 손으로 초기화 하자. 경우에 따라 저절로 되기도 하고 안되기도 하기 때문이다초기화되지 않은 값을 읽으면 미정의 동작이 일어난다.모든 객체를 사용하기 전에 항상 초기화하자.- 생성자에서는, 멤버 초기화 리스트를 사용하자. 그..

카테고리 없음 2018.01.25

[Effective C++] Item3_낌새만 보이면 const를 들이대보자

Item3_낌새만 보이면 const를 들이대보자챕터 핵심 내용const를 붙여 선언하면 컴파일러가 사용상의 에러를 잡아내는 데 도움을 준다.컴파일러 쪽에서 보면 비트수준 상수성을 지켜야 하지만, 우리는 개념적인(논리적인) 상수성을 사용해서 프로그래밍 해야한다.상수 멤버 및 비상수 멤버 함수가 기능적으로 서로 똑같게 구현되어 있을 경우에, 코드 중복을 피하고 싶다면 비상수 버전이 상수 버전을 호출하게 하라.- const를 붙여 선언하면 컴파일러가 사용상의 에러를 잡아내는 데 도움을 준다const를 사용할 수 있는 곳에는 적극 활용하자.의도치 않은 오류를 잡아내는 데 많은 도움을 준다.class Rational { ... }; const Rational operator*(const Rational& lhs,..

카테고리 없음 2018.01.24

Item2 - #define을 쓰려거든 const, enum, inline을 떠올리자

Item2 - #define을 쓰려거든 const, enum, inline을 떠올리자챕터 핵심 내용단순한 상수를 쓸 대는, #define보다 const 객체 혹은 enum을 우선 고려하자.함수처럼 쓰이는 매크로를 만들려면, #define 매크로보다 인라인 함수를 우선 고려하자.- 단순한 상수를 쓸 대는, #define보다 const 객체 혹은 enum을 우선 고려하자전처리기로 기호상수를 정의할 시, 컴파일러의 기호 테이블에 추가되지 않는다.이는, 작동 방식이 '대체'이기 때문이다.디버깅을 할 때, 난감할 수 있다.또한, 코드의 길이가 늘어난다.클래스 상수를 정의할 땐, enum을 응용할 수 있다.동작 방식이 const보다 #define에 가깝다.옛날 코드들에게서 발견될 수 있다.- 함수처럼 쓰이는 매크로..

카테고리 없음 2018.01.24

[Review] 모던 C++ 프로그래밍 입문(음두헌 저) 리뷰

모던 C++ 프로그래밍 입문(음두헌 저) - 리뷰모던 C++ 프로그래밍 입문책 소개pclaf라는 WinAPI 프레임워크를 이용해 GUI 프로그래밍과 모던 C++을 익힐 수 있는 책이다. 단계별로 진행하면서 카드 게임을 완성하고 더불어 객체지향 개념도 정립할 수 있게 도와준다. STL과 일반화 프로그래밍도 소개해주고 있으며, 다양한 예제로 실력 향상을 도와주는 책이다.챕터 별로 '실습 과제 - 필수 문법 - 응용 과제 - 연습 문제'로 구성되어 있다. 실습 과제 전, 비유를 통해 이론적인 내용들을 쉽게 설명한다. 실습 과제는 따라하면서 객체지향 개념을 습득하는 과정으로 되어 있고, 필수 문법은 챕터 별 필수적인 문법을 예제 위주로 다루며, 응용 과제에서는 실습 과제와 필수 문법에서 다룬 문법 요소들을 응용..

Outdated/Book 2018.01.19

[Data Structure] C++로 구현해보는 자료구조 - 들어가며

C++로 구현해보는 자료구조 - 들어가며자료구조를 정리하는 마음으로 본 글을 포스팅하려고 한다. 순서는 다음과 같이 이뤄진다.- 선형 자료구조배열(Array)정렬 정적 배열(Sorted Static Array)비정렬 동적 배열(Unsorted Dynamic Array)정렬 동적 배열(Sorted Dynamic Array)연결구조(Linked List)단일 연결구조(Single Linked List)이중 연결구조(Double Linked List)선형 연결구조(Circular Linked List)스택(Stack)배열 버전연결구조 버전큐(Queue)배열 버전 / 환형 큐(Circular Queue)연결 구조 버전데크(Deque)- 비선형 자료구조트리(Tree)이진 탐색 트리(Binary Search Tre..

카테고리 없음 2018.01.10

[Modern C++] Smart Pointer - std::unique_ptr

보았듯 좀 더 최적화가 되어있다.주로 사용되는 메소드는 다음과 같다.이름설명get자원에 대한 포인터를 반환한다.release자원을 가리키는 포인터를 돌려준 후 해당 자원을 해제한다.reset자원을 재설정 한다.swap인자로 전달된 포인터와 자원을 치환한다.Terminology메모리 누수동적으로 객체 생성 및 사용 후, 메모리를 시스템에 반환하지 않아 누적되면 메모리가 부족해지는 현상댕글링 포인터포인터 변수가 가리키는 객체를 이미 삭제해서 다른 용도로 메모리를 사용중임에도 이 공간을 그 포인터 변수로 다시 참조하는 경우중복 삭제한 코드에서 객체를 삭제했는 데, 다른 코드에서 그 메모리를 다시 삭제하는 경우

Outdated/Library 2018.01.09

[Modern C++ 14] Smart Pointer - std::weak_ptr

Modern C++ 14주제 : Smart Pointer(std::unique_ptr, std::shared_ptr, std::weak_ptr) 헤더 : 설명 모던 C++에는 스마트 포인터 객체가 추가되었다. 기존 C 스타일의 포인터는 동적으로 생성된 객체들을 프로그래머가 잘 제어했어야 했다. 메모리가 잘 관리되지 않는다면 메모리 누수(memory leak), 댕글링 포인터(dangling pointer), 중복 삭제(double free) 등의 문제가 생길 수 있다. 스마트 포인터는 RAII(Resource Acquisition Is Initialization) 기법을 이용해 메모리 해제를 자동화시킴으로써 프로그래머의 실수를 줄여 보다 더 안전한 프로그래밍을 할 수 있게 되었다. 또한, 템플릿으로 작성..

Outdated/Library 2018.01.04

[Modern C++ 14] Smart Pointer - std::shared_ptr

Modern C++주제 : Smart Pointer(std::unique_ptr, std::shared_ptr, std::weak_ptr) 헤더 : 설명 모던 C++에는 스마트 포인터 객체가 추가되었다. 기존 C 스타일의 포인터는 동적으로 생성된 객체들을 프로그래머가 잘 제어했어야 했다. 메모리가 잘 관리되지 않는다면 메모리 누수(memory leak), 댕글링 포인터(dangling pointer), 중복 삭제(double free) 등의 문제가 생길 수 있다. 스마트 포인터는 RAII(Resource Acquisition Is Initialization) 관용구를 이용해 메모리 해제를 자동화시킴으로써 프로그래머의 실수를 줄여 보다 더 안전한 프로그래밍을 할 수 있게 되었다. 또한, 템플릿으로 작성되어..

Outdated/Library 2018.01.02