SlideShare a Scribd company logo
Effective C++_1
131043 양현찬
NHN NEXT
C++ == „언어들의 연합체‟
C++의 하위언어들
•C
•C with Classes
•Template
•STL
C++의 어떤 부분을 사용하냐에
따라 효과적인 규칙이 달라진다.
가급적 선행처리자 보다 컴파일러를 가까이
#define 보다 const, enum, inline을 떠올리자
혹은 파일입출력을 이용한 스크립트 언어 파싱
Const를 사용할 때
•포인터 사용시 상수포인터를 정의
•포인터가 가리키는 대상도 상수로 정의
•Const char * const myFavorite = “D-Frag!”;
•Cont std::string myFavoriteChar = “Takao”;
Class에서 상수 멤버 선언과 정의
.h 파일 (선언 부분)
.c++ 파일(정의 부분)
정의
죄송합니다.
구식 컴파일러 (대표적으로 V양)
표준이 아님! 클래스 내부에서 상수를 사용해야 할 경우 문제가 발생!
나열자 둔갑술
두.. 둔갑술!
Enum의 특징
•Const는 주소값에 접근할 수 있다.
•Enum은 주소값에 접근하는 것은 불법이다.
•절대 쓸데 없는 메모리 할당이 없다.
•나열자 둔갑술은 상당히 많이 사용된다.
•프로그래머는 닌자일지도 모른다.
메크로 함수대신
template과 inline
Const를 사용하자!
이게 무엇인가?
레퍼런스(참조자)를 사용해야 할 때
•참조하고자 하는 객체를 미리 알고 있을 때
•다른 객체를 바꾸어 참조할 일이 없을 때
•포인터를 사용하면 문법상 어색해질 때
Const
•변해서는 안됨을 가시화 시켜줌
•유효범위 상수를 선언
•Static으로 선언한 변수를 보호
•포인터의 경우 값과 주소값을 보호
Const와 포인터 사용법
Iterator와 const
함수와 const
함수와 const
물리적 상수성
분명 operator[]함수는 pText의 값을 변경하지는 않는다.
하지만 operator 함수로 인해 값이 변경되고 있다!
논리적 상수성
• 뭐 어때 너만 모르면, 난 상수함수다!
캐스팅 안 쓸땐 안 쓰더라도 코드 중복정돈 피해 두 되잖아?
재귀함수를 피하기 위해
비상수 객체를 상수 객체화
초기화 하자!
일반적으로는 이미 초기화가 이루어진 상태
정적 객체
•프로그램 끝날 때 까지 살아있는 객체
•초기화 순서는 정해져 있지 않다.
어디서 본듯한데? -> 싱글톤!
컴파일러가 만드는 함수들
자동으로 생성하는 함수들
자동으로 생성되는 상황
컴파일러가 거부하는 경우
•클래스를 구현한 코드가 적합하지 않거나 이치에
맞지 않을 경우
•예를 들면 참조자 멤버가 있는 경우
•이럴 경우 사용자가 직접 대입연산을 정의 해줘야
한다.
컴파일러가 만든 함수의 사용을 금지하고 싶을 때
복사 방지 클래스
다형성을 가진 클래스의 소멸자
문제점
팩토리 함수에서 받는 함수는 Timekeeper를 상속받는 파생클래스다.
따라서 할당 받은 메모리를 해제할 때 Timekeeper부분만 해제되고 파생클래스부분은 해제되지
못한 부분해제현상이 생김.
해결
소멸자를 가상함수로 만들어 가상함수 테이블을 생성, 파생클래스의 소멸자를 가리켜 해
제시에 호출되도록 한다.
쓸때없이 가상함수테이블을 만들어 메모리를 차지하지 말자.
또 다른 문제점
추상클래스를 원하는데 순수가상함수가 없을 때, 소멸자를 순수가상함수로 선언
정의 부에서 따로 가상함수를 선언해 두어야 함
소멸자의 예외처리
문제
예외처리방법
또 다른 문제
Close 호출에 예외가 발생할 경우
Try-catch문 – 예외처리를 위한 문법
생성자,소멸자에서 가상함수 호출은 금지!
문제점
상속받은 BuyTransaction이 생성되기 전에
Transaction의 생성자가 실행되고 있다!
그냥 안 쓰면 된다
explicit
Operator=()을 사용할 시 주의 사항
Operator=()을 사용할 시 주의 사항_2
곁으로 보기에는 문제가 없다
항상 프로그래머를 빠가로 만드는 주역들
문제점, If( rhs==this )
거울을 보거든 그저 가만히 보기만 하라
하지만 new에 대한 예외에는 안전하지 않다.
내가 죽어도 슬프지 않게 클론을 만들자
„Copy and swap‟ 보고 넘어갑시다
Operator=()을 사용할 시 주의 사항_3
양현찬 : 멤버변수 하나 추가하면 함수에도 내용
을 추가해야 한다. 초기화 리스트에 추가하는 것
도 귀찮은데 이런 것도 해줘야 하나?
컴파일러 : ㅇㅇ
상속받은 클래스임에도 불구하고 초기화 리
스트에 상속받은 인자가 명시되지 않아
operator=함수에서 자기가 가진 고유한 멤
버만 복사된다!
계속되는 문제
역시 노가다
초기화 리스트에 명시해주고
부모의 operator=함수를 불러오자
Effective c++ 1
Effective c++ 1

More Related Content

What's hot

Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
Dong Chan Shin
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
Injae Lee
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
Nam Hyeonuk
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
Injae Lee
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
세빈 정
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
연우 김
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
quxn6
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
quxn6
 
[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수
Keunhyun Oh
 
[SwiftStudy 2016] 2장. Swift 타입 파트 1
[SwiftStudy 2016] 2장. Swift 타입 파트 1[SwiftStudy 2016] 2장. Swift 타입 파트 1
[SwiftStudy 2016] 2장. Swift 타입 파트 1
Keunhyun Oh
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
SeungYeonChoi10
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
quxn6
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리
연우 김
 
M1 2 1
M1 2 1M1 2 1
M1 2 1nexthw
 
Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6
연우 김
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차Injae Lee
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
Dong Chan Shin
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
성연 김
 

What's hot (20)

Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수[SwiftStudy 2016] 3장. 함수
[SwiftStudy 2016] 3장. 함수
 
[SwiftStudy 2016] 2장. Swift 타입 파트 1
[SwiftStudy 2016] 2장. Swift 타입 파트 1[SwiftStudy 2016] 2장. Swift 타입 파트 1
[SwiftStudy 2016] 2장. Swift 타입 파트 1
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리
 
M1 2 1
M1 2 1M1 2 1
M1 2 1
 
Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
 

Viewers also liked

Mesh slice 1
Mesh slice 1Mesh slice 1
Mesh slice 1
현찬 양
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
Open gl 시작하기
Open gl 시작하기Open gl 시작하기
Open gl 시작하기현찬 양
 
초등학생도 하는 그냥 DB설치
초등학생도 하는 그냥 DB설치초등학생도 하는 그냥 DB설치
초등학생도 하는 그냥 DB설치현찬 양
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
현찬 양
 

Viewers also liked (6)

Mesh slice 1
Mesh slice 1Mesh slice 1
Mesh slice 1
 
쿼터니언
쿼터니언쿼터니언
쿼터니언
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
Open gl 시작하기
Open gl 시작하기Open gl 시작하기
Open gl 시작하기
 
초등학생도 하는 그냥 DB설치
초등학생도 하는 그냥 DB설치초등학생도 하는 그냥 DB설치
초등학생도 하는 그냥 DB설치
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 

Similar to Effective c++ 1

Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
Injae Lee
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
Dong Chan Shin
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4문익 장
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basics
Jaewon Choi
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차Injae Lee
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
성연 김
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
Shin heemin
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
Min-soo Park
 
Ec++ c 1,2 surmary
Ec++ c 1,2 surmaryEc++ c 1,2 surmary
Ec++ c 1,2 surmarySehyeon Nam
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
Ryan Park
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
성연 김
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스
재정 이
 

Similar to Effective c++ 1 (20)

Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basics
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
7 8 1
7 8 17 8 1
7 8 1
 
EC 789
EC 789EC 789
EC 789
 
Ec++ c 1,2 surmary
Ec++ c 1,2 surmaryEc++ c 1,2 surmary
Ec++ c 1,2 surmary
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스
 

Effective c++ 1