SlideShare une entreprise Scribd logo
1  sur  18
More Effective C++ 정리
유용하고 재미있는 프로그래밍 기법들
• C++ 프로그래밍 가이드라인에 관련되어 있음
• C++ 프로그래머들이 공통적으로 겪는 고민에 대한 해결책을
‘검증된 방법’으로 선사
• 기법 , 관용어법, 또는 패턴이라고 부름
생성자 함수와 비멤버 함수를 가상함수처
럼 만드는 방법
• 가상 생성자라는 말은 모호함
• 의미는 모호하지만 상당히 쓸모 있음
• 런타임에 디스크에서 읽은 정보에 따라 다른 타입의 객체를 만들기
때문에 이 함수를 가상 생성자라고 부를 수 있음
• 가상 생성자란 자신이 받은 입력데이터에 의존하여 다른 타입의 객
체를 생성하는 함수를 말함
가상 복사 생성자
• 가상 복사 생성자는 이것을 호출한 객체를 그대로 본 뜬 사본의
포인터를 반환
• 가상 복사 생성자는 해당 클래스의 진짜 복사 생성자를 호출하
는 것
• 진짜 복사 생성자가 하는 복사가 얕은 복사 이면 가상 복사 생
성자도 얕은 복사
• 진짜 복사 생성자가 하는 복사가 깊은 복사를 하면, 가상 복사
생성자도 깊은 복사
클래스 인스턴스의 개수를 의도대로 제한
하는 방법
• 객체를 생성시 바로 생성자가 호출
• 특정한 클래스의 객체가 만들어지지 않게 하는 갖아 쉬운 방법
은 그 클래스의 생성자를 private로 선언
• 비멤버 함수에 있어 inline은 “이 함수는 내부 연결을 가진다“ 라
는 뜻
• 정적 객체를 선언한 비멤버 함수는 절대로 inline으로 선언하면
안 된다.
객체 생성이 이루어지는 세 가지 상황
• 자체로 생성 될 때
• 파생된 객체의 기본 클래스 부분으로 만들어질 때
• 다른 객체의 클래스 멤버로서 만들어질 때
인스턴스 기능을 가진 기본 클래스
• 인스턴스 카운팅 기능을 캡슐화해서 하나의 클래스에 넣어둘
방법이 필요
• 인스턴스 카운트값 자체를 건드리는 기능도 함께 고려
객체가 힙에만 생성되게 하기
• new 이외의 방법으로는 객체를 생성할 수 없도록 해야함
• 소멸자만 private로 하고 생성자는 public으로 만든 후 진짜 소
멸자를 호출하는 유사 소멸자를 만드는 것(객체를 소멸시킬 때
에는 유사 소멸자를 호출)
• 이 클래스를 상속하거나 이 클래스 인스턴스를 다른 객체의 멤
버로 넣는 일은 한꺼번에 할 수 없음
어떤 객체가 힙에 생성되었는지, 그렇지
않은지를 알아내는 방법
• new 이외의 방법으로는 객체를 생성할 수 없도록 해야함
• 소멸자만 private로 하고 생성자는 public으로 만든 후 진짜 소
멸자를 호출하는 유사 소멸자를 만드는 것(객체를 소멸시킬 때
에는 유사 소멸자를 호출)
• 이 클래스를 상속하거나 이 클래스 인스턴스를 다른 객체의 멤
버로 넣는 일은 한꺼번에 할 수 없음
프로그램의 주소공간
• 스택은 아래로 자라고(상위주소)
• 힙은 위로자란다(하위주소)
• 정적 객체는 대게 힙의 아래쪽에 둠
스마트 포인터
• C++언어에서 사용되는 보통의 포인터처럼 생김
• 포인터처럼 동작하고, 많은 기능을 제공
• 리소스 관리, 반복 코딩의 자동화 등의 다양한 용도에 사용
스마트 포인터의 사용 이유
• 생성과 소멸작업을 조절할 수 있음
-> 스마트 포인터가 생성되고 소멸되는 시기를 결정가능
• 스마트 포인터는 생성될 때 기본값 NULL을 가지기 때문에, 값
을 주지 않으면 초기화되지 않는 보통 포인터의 문제를 해결
• 객체를 가리키고 있던 최후의 포인터가 소멸될 때 자동으로 그
객체를 삭제하여 리소스 누수를 막아줌
스마트 포인터의 사용 이유
• 복사와 대입 동작을 조절할 수 있음
• 스마트 포인터가 가리키고 있는 객체까지 자동으로 복사, 대입
하는 깊은 복사를 수행하도록 할 수 있음
• 포인터 자체만 복사하여 대입 할 수 있음
• 이런 동작을 전혀 이용하지 않을 수도 있음
-> 프로그래머가 원하는대로 작동 가능
스마트 포인터의 사용 이유
• 역참조 동작을 조절할 수 있음
• 스마트포인터가 가리키는 객체를 가져오려고 할 때 어떤 기능
을 할 것인지 결정할 수 있음
• 지연 방식의 데이터/명령어 가져오기를 구현하는데 스마트 포
인터를 사용할 수 있음
스마트 포인터와 const
• 보통의 포인터는 const 키워드로는 포인터가 가리키는 것과 포
인터 그 자체를 상수로 만들어 버리는 방법이 있음
• 스마트포인터는 약간 다르게 const 키워드를 놓을 수 있는 위치
가 한 곳뿐
• 가리키는 객체가 아니라 포인터만 상수로 만들 수 있음
스마트 포인터 정리
• 널 점검이나, 일반 포인터로의 변환, 상속 기반의 변환, 상수 객체에
대한 포인터 지원 등의 상황에서는 스마트 포인터의 사용을 제한해
야 함
• 스마트 포인터는 구현하기 까다롭고, 이해하기도 쉽지 않으며 이후
의 유지보수도 어려움
• 스마트 포인터를 사용한 코드는, 일반 포인터에 비해 디버깅도 많이
어려움
• 일반 포인터를 완벽하게 대신할 수 있는 스마트 포인터의 구현은 불
가능
• 즉 스마트 포인터는 적절한 경우에만 사용해야 함
참조 카운팅
• 참조 카운팅이란 여러 개의 객체들이 똑같은 값을 가졌으면, 그
객체들로 하여금 그 값 나타내는 하나의 데이터를 공유하게 해
서 데이터의 양을 절약하는 기법
• 힙 객체를 둘러싼 내부 정보를 유지하는 작업을 단순하게 하자
는 동기
• 똑같은 값을 가지고 있는 객체들이 그 값을 하나씩 꿰어차도록
놔두는 것은 낭비, 따라서 데이터는 하나만 공유하여 효율적으
로 메모리관리, 속도 관리.
참조 카운팅
• 객체들이 공통된 값을 가지는 경향이 뚜렷한 경우에는 참조 카
운팅을 통해 실행 시간과 메모리 공간을 절약 할 수 있음
• 값이 크고 그 값을 동시에 공유하는 객체가 많을수록 메모리 절
약 효과는 커짐
• 객체 개수에 대한 값 개수의 비율이 클수록 참조 카운팅을 할
필요가 더 커짐
• 어떤 객체값을 생성하거나 소멸시키는데 많은 비용이 들거나
메모리 소모가 클 때, 객체들이 값을 공유하지 않으면 참조 카운
팅은 별 효과를 보이지 못함

Contenu connexe

Tendances

M5 1 1
M5 1 1M5 1 1
M5 1 1nexthw
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2세빈 정
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리Injae Lee
 
M1 2 1
M1 2 1M1 2 1
M1 2 1nexthw
 
You don't know JS / this / chapter 1-2
You don't know JS / this / chapter 1-2You don't know JS / this / chapter 1-2
You don't know JS / this / chapter 1-2Kiwoong Kwon
 
Momenti Seminar - A Tour of Rust, Part 1
Momenti Seminar - A Tour of Rust, Part 1Momenti Seminar - A Tour of Rust, Part 1
Momenti Seminar - A Tour of Rust, Part 1Chris Ohk
 
Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Chris Ohk
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지Dong Chan Shin
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
9턴 웹게임으로 익히는 루비
9턴 웹게임으로 익히는 루비9턴 웹게임으로 익히는 루비
9턴 웹게임으로 익히는 루비지혜 서
 
Javascript Test Double Sinon.js
Javascript Test Double Sinon.jsJavascript Test Double Sinon.js
Javascript Test Double Sinon.js우영 주
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfHYUNWOO KIM
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동선협 이
 
유니티 - 프리팹과 코루틴
유니티 - 프리팹과 코루틴유니티 - 프리팹과 코루틴
유니티 - 프리팹과 코루틴주형 고
 

Tendances (20)

M5 1 1
M5 1 1M5 1 1
M5 1 1
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
M1 2 1
M1 2 1M1 2 1
M1 2 1
 
You don't know JS / this / chapter 1-2
You don't know JS / this / chapter 1-2You don't know JS / this / chapter 1-2
You don't know JS / this / chapter 1-2
 
Momenti Seminar - A Tour of Rust, Part 1
Momenti Seminar - A Tour of Rust, Part 1Momenti Seminar - A Tour of Rust, Part 1
Momenti Seminar - A Tour of Rust, Part 1
 
Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
9턴 웹게임으로 익히는 루비
9턴 웹게임으로 익히는 루비9턴 웹게임으로 익히는 루비
9턴 웹게임으로 익히는 루비
 
Javascript Test Double Sinon.js
Javascript Test Double Sinon.jsJavascript Test Double Sinon.js
Javascript Test Double Sinon.js
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdf
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동
 
유니티 - 프리팹과 코루틴
유니티 - 프리팹과 코루틴유니티 - 프리팹과 코루틴
유니티 - 프리팹과 코루틴
 

Similaire à More effective c++ 3주차

Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4문익 장
 
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라MinKyu Kim
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2Injae Lee
 
모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디quxn6
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장 Shin heemin
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summarySehyeon Nam
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리연우 김
 
Microsoft pp lpdf
Microsoft pp lpdfMicrosoft pp lpdf
Microsoft pp lpdfHYUNWOO KIM
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
Mec chapter 5,6
Mec chapter 5,6Mec chapter 5,6
Mec chapter 5,6문익 장
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기noerror
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디quxn6
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)명석 고
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object민태 김
 
Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6연우 김
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2문익 장
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 

Similaire à More effective c++ 3주차 (20)

Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
 
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
MEC++ 5
MEC++ 5MEC++ 5
MEC++ 5
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
 
Boost
BoostBoost
Boost
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리
 
Microsoft pp lpdf
Microsoft pp lpdfMicrosoft pp lpdf
Microsoft pp lpdf
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
Mec chapter 5,6
Mec chapter 5,6Mec chapter 5,6
Mec chapter 5,6
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6Effective c++ 정리 chapter 6
Effective c++ 정리 chapter 6
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 

Plus de Injae Lee

Stonze study week1
Stonze study week1Stonze study week1
Stonze study week1Injae Lee
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차Injae Lee
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptInjae Lee
 
More effective c++ Chap1~2
More effective c++ Chap1~2More effective c++ Chap1~2
More effective c++ Chap1~2Injae Lee
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
 
갓오브워 어센션 포스트모템
갓오브워 어센션  포스트모템갓오브워 어센션  포스트모템
갓오브워 어센션 포스트모템Injae Lee
 

Plus de Injae Lee (6)

Stonze study week1
Stonze study week1Stonze study week1
Stonze study week1
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차
 
More effective c++ 챕터3~4ppt
More effective c++ 챕터3~4pptMore effective c++ 챕터3~4ppt
More effective c++ 챕터3~4ppt
 
More effective c++ Chap1~2
More effective c++ Chap1~2More effective c++ Chap1~2
More effective c++ Chap1~2
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
갓오브워 어센션 포스트모템
갓오브워 어센션  포스트모템갓오브워 어센션  포스트모템
갓오브워 어센션 포스트모템
 

More effective c++ 3주차

  • 2. 유용하고 재미있는 프로그래밍 기법들 • C++ 프로그래밍 가이드라인에 관련되어 있음 • C++ 프로그래머들이 공통적으로 겪는 고민에 대한 해결책을 ‘검증된 방법’으로 선사 • 기법 , 관용어법, 또는 패턴이라고 부름
  • 3. 생성자 함수와 비멤버 함수를 가상함수처 럼 만드는 방법 • 가상 생성자라는 말은 모호함 • 의미는 모호하지만 상당히 쓸모 있음 • 런타임에 디스크에서 읽은 정보에 따라 다른 타입의 객체를 만들기 때문에 이 함수를 가상 생성자라고 부를 수 있음 • 가상 생성자란 자신이 받은 입력데이터에 의존하여 다른 타입의 객 체를 생성하는 함수를 말함
  • 4. 가상 복사 생성자 • 가상 복사 생성자는 이것을 호출한 객체를 그대로 본 뜬 사본의 포인터를 반환 • 가상 복사 생성자는 해당 클래스의 진짜 복사 생성자를 호출하 는 것 • 진짜 복사 생성자가 하는 복사가 얕은 복사 이면 가상 복사 생 성자도 얕은 복사 • 진짜 복사 생성자가 하는 복사가 깊은 복사를 하면, 가상 복사 생성자도 깊은 복사
  • 5. 클래스 인스턴스의 개수를 의도대로 제한 하는 방법 • 객체를 생성시 바로 생성자가 호출 • 특정한 클래스의 객체가 만들어지지 않게 하는 갖아 쉬운 방법 은 그 클래스의 생성자를 private로 선언 • 비멤버 함수에 있어 inline은 “이 함수는 내부 연결을 가진다“ 라 는 뜻 • 정적 객체를 선언한 비멤버 함수는 절대로 inline으로 선언하면 안 된다.
  • 6. 객체 생성이 이루어지는 세 가지 상황 • 자체로 생성 될 때 • 파생된 객체의 기본 클래스 부분으로 만들어질 때 • 다른 객체의 클래스 멤버로서 만들어질 때
  • 7. 인스턴스 기능을 가진 기본 클래스 • 인스턴스 카운팅 기능을 캡슐화해서 하나의 클래스에 넣어둘 방법이 필요 • 인스턴스 카운트값 자체를 건드리는 기능도 함께 고려
  • 8. 객체가 힙에만 생성되게 하기 • new 이외의 방법으로는 객체를 생성할 수 없도록 해야함 • 소멸자만 private로 하고 생성자는 public으로 만든 후 진짜 소 멸자를 호출하는 유사 소멸자를 만드는 것(객체를 소멸시킬 때 에는 유사 소멸자를 호출) • 이 클래스를 상속하거나 이 클래스 인스턴스를 다른 객체의 멤 버로 넣는 일은 한꺼번에 할 수 없음
  • 9. 어떤 객체가 힙에 생성되었는지, 그렇지 않은지를 알아내는 방법 • new 이외의 방법으로는 객체를 생성할 수 없도록 해야함 • 소멸자만 private로 하고 생성자는 public으로 만든 후 진짜 소 멸자를 호출하는 유사 소멸자를 만드는 것(객체를 소멸시킬 때 에는 유사 소멸자를 호출) • 이 클래스를 상속하거나 이 클래스 인스턴스를 다른 객체의 멤 버로 넣는 일은 한꺼번에 할 수 없음
  • 10. 프로그램의 주소공간 • 스택은 아래로 자라고(상위주소) • 힙은 위로자란다(하위주소) • 정적 객체는 대게 힙의 아래쪽에 둠
  • 11. 스마트 포인터 • C++언어에서 사용되는 보통의 포인터처럼 생김 • 포인터처럼 동작하고, 많은 기능을 제공 • 리소스 관리, 반복 코딩의 자동화 등의 다양한 용도에 사용
  • 12. 스마트 포인터의 사용 이유 • 생성과 소멸작업을 조절할 수 있음 -> 스마트 포인터가 생성되고 소멸되는 시기를 결정가능 • 스마트 포인터는 생성될 때 기본값 NULL을 가지기 때문에, 값 을 주지 않으면 초기화되지 않는 보통 포인터의 문제를 해결 • 객체를 가리키고 있던 최후의 포인터가 소멸될 때 자동으로 그 객체를 삭제하여 리소스 누수를 막아줌
  • 13. 스마트 포인터의 사용 이유 • 복사와 대입 동작을 조절할 수 있음 • 스마트 포인터가 가리키고 있는 객체까지 자동으로 복사, 대입 하는 깊은 복사를 수행하도록 할 수 있음 • 포인터 자체만 복사하여 대입 할 수 있음 • 이런 동작을 전혀 이용하지 않을 수도 있음 -> 프로그래머가 원하는대로 작동 가능
  • 14. 스마트 포인터의 사용 이유 • 역참조 동작을 조절할 수 있음 • 스마트포인터가 가리키는 객체를 가져오려고 할 때 어떤 기능 을 할 것인지 결정할 수 있음 • 지연 방식의 데이터/명령어 가져오기를 구현하는데 스마트 포 인터를 사용할 수 있음
  • 15. 스마트 포인터와 const • 보통의 포인터는 const 키워드로는 포인터가 가리키는 것과 포 인터 그 자체를 상수로 만들어 버리는 방법이 있음 • 스마트포인터는 약간 다르게 const 키워드를 놓을 수 있는 위치 가 한 곳뿐 • 가리키는 객체가 아니라 포인터만 상수로 만들 수 있음
  • 16. 스마트 포인터 정리 • 널 점검이나, 일반 포인터로의 변환, 상속 기반의 변환, 상수 객체에 대한 포인터 지원 등의 상황에서는 스마트 포인터의 사용을 제한해 야 함 • 스마트 포인터는 구현하기 까다롭고, 이해하기도 쉽지 않으며 이후 의 유지보수도 어려움 • 스마트 포인터를 사용한 코드는, 일반 포인터에 비해 디버깅도 많이 어려움 • 일반 포인터를 완벽하게 대신할 수 있는 스마트 포인터의 구현은 불 가능 • 즉 스마트 포인터는 적절한 경우에만 사용해야 함
  • 17. 참조 카운팅 • 참조 카운팅이란 여러 개의 객체들이 똑같은 값을 가졌으면, 그 객체들로 하여금 그 값 나타내는 하나의 데이터를 공유하게 해 서 데이터의 양을 절약하는 기법 • 힙 객체를 둘러싼 내부 정보를 유지하는 작업을 단순하게 하자 는 동기 • 똑같은 값을 가지고 있는 객체들이 그 값을 하나씩 꿰어차도록 놔두는 것은 낭비, 따라서 데이터는 하나만 공유하여 효율적으 로 메모리관리, 속도 관리.
  • 18. 참조 카운팅 • 객체들이 공통된 값을 가지는 경향이 뚜렷한 경우에는 참조 카 운팅을 통해 실행 시간과 메모리 공간을 절약 할 수 있음 • 값이 크고 그 값을 동시에 공유하는 객체가 많을수록 메모리 절 약 효과는 커짐 • 객체 개수에 대한 값 개수의 비율이 클수록 참조 카운팅을 할 필요가 더 커짐 • 어떤 객체값을 생성하거나 소멸시키는데 많은 비용이 들거나 메모리 소모가 클 때, 객체들이 값을 공유하지 않으면 참조 카운 팅은 별 효과를 보이지 못함