SlideShare a Scribd company logo
Effective C++_1
131043 양현찬
NHN NEXT
C++ == „언어들의 연합체‟
C++의 하위언어들
•C
•C with Classes
•Template
•STL
C++의 어떤 부분을 사용하냐에
따라 효과적인 규칙이 달라진다.
가급적 선행처리자 보다 컴파일러를 가까이
Effective c++ 1
#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
Effective c++ 1
물리적 상수성
분명 operator[]함수는 pText의 값을 변경하지는 않는다.
하지만 operator 함수로 인해 값이 변경되고 있다!
논리적 상수성
• 뭐 어때 너만 모르면, 난 상수함수다!
Effective c++ 1
캐스팅 안 쓸땐 안 쓰더라도 코드 중복정돈 피해 두 되잖아?
재귀함수를 피하기 위해
비상수 객체를 상수 객체화
초기화 하자!
Effective c++ 1
Effective c++ 1
일반적으로는 이미 초기화가 이루어진 상태
Effective c++ 1
Effective c++ 1
Effective c++ 1
정적 객체
•프로그램 끝날 때 까지 살아있는 객체
•초기화 순서는 정해져 있지 않다.
Effective c++ 1
Effective c++ 1
어디서 본듯한데? -> 싱글톤!
컴파일러가 만드는 함수들
자동으로 생성하는 함수들
자동으로 생성되는 상황
컴파일러가 거부하는 경우
•클래스를 구현한 코드가 적합하지 않거나 이치에
맞지 않을 경우
•예를 들면 참조자 멤버가 있는 경우
•이럴 경우 사용자가 직접 대입연산을 정의 해줘야
한다.
컴파일러가 만든 함수의 사용을 금지하고 싶을 때
복사 방지 클래스
다형성을 가진 클래스의 소멸자
문제점
팩토리 함수에서 받는 함수는 Timekeeper를 상속받는 파생클래스다.
따라서 할당 받은 메모리를 해제할 때 Timekeeper부분만 해제되고 파생클래스부분은 해제되지
못한 부분해제현상이 생김.
해결
소멸자를 가상함수로 만들어 가상함수 테이블을 생성, 파생클래스의 소멸자를 가리켜 해
제시에 호출되도록 한다.
쓸때없이 가상함수테이블을 만들어 메모리를 차지하지 말자.
또 다른 문제점
추상클래스를 원하는데 순수가상함수가 없을 때, 소멸자를 순수가상함수로 선언
정의 부에서 따로 가상함수를 선언해 두어야 함
소멸자의 예외처리
문제
예외처리방법
또 다른 문제
Close 호출에 예외가 발생할 경우
Try-catch문 – 예외처리를 위한 문법
Effective c++ 1
생성자,소멸자에서 가상함수 호출은 금지!
문제점
상속받은 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 (20)

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

Viewers also liked (6)

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

Similar to Effective c++ 1 (20)

PPTX
Chapter7~9 ppt
Injae Lee
 
PDF
Effective c++ chapter7_8_9_dcshin
Dong Chan Shin
 
PPTX
Mec++ chapter3,4
문익 장
 
PPTX
Chapter5 ~ 6
Injae Lee
 
PPTX
[아꿈사] The C++ Programming Language 13장 템플릿
해강
 
PPTX
A tour of C++ : the basics
Jaewon Choi
 
PPTX
More Effective C++ 4주차
Injae Lee
 
PPTX
Effective c++ chapter 7,8
문익 장
 
PPT
카사 공개세미나1회 W.E.L.C.
Ryan Park
 
PDF
[데브루키] 게임 엔진 아키텍쳐_3장_게임을 위한 소프트웨어 엔지니어링 기초
MinGeun Park
 
PPTX
Effective c++chapter1 and2
성연 김
 
PPTX
Effective c++ Chapter1,2
문익 장
 
PPTX
Effective c++ 1~8장
Shin heemin
 
PPTX
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
Min-soo Park
 
PDF
7 8 1
nexthw
 
PDF
EC 789
Gyeongwook Choi
 
PPTX
Ec++ c 1,2 surmary
Sehyeon Nam
 
PPT
Working Effectively With Legacy Code - xp2005
Ryan Park
 
PPTX
Effective c++chapter4
성연 김
 
PDF
C++ api design 품질
HyeonSeok Choi
 
Chapter7~9 ppt
Injae Lee
 
Effective c++ chapter7_8_9_dcshin
Dong Chan Shin
 
Mec++ chapter3,4
문익 장
 
Chapter5 ~ 6
Injae Lee
 
[아꿈사] The C++ Programming Language 13장 템플릿
해강
 
A tour of C++ : the basics
Jaewon Choi
 
More Effective C++ 4주차
Injae Lee
 
Effective c++ chapter 7,8
문익 장
 
카사 공개세미나1회 W.E.L.C.
Ryan Park
 
[데브루키] 게임 엔진 아키텍쳐_3장_게임을 위한 소프트웨어 엔지니어링 기초
MinGeun Park
 
Effective c++chapter1 and2
성연 김
 
Effective c++ Chapter1,2
문익 장
 
Effective c++ 1~8장
Shin heemin
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
Min-soo Park
 
7 8 1
nexthw
 
Ec++ c 1,2 surmary
Sehyeon Nam
 
Working Effectively With Legacy Code - xp2005
Ryan Park
 
Effective c++chapter4
성연 김
 
C++ api design 품질
HyeonSeok Choi
 
Ad

Effective c++ 1