[Effective C++] 항목26 : 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자

생성자, 소멸자가 있는 타입의 변수를 정의하면 변수를 정의할 때 생성자, 변수가 유효범위를 벗어날 때 소멸자를 호출하는 비용을 지불한다. 변수가 정의됐으나 사용되지 않더라도 마찬가지encrypted는 예외가 발생한다면 사용하지 않는 변수이다. 그러나 encryptePa

3일 전
·
0개의 댓글
·

[Effective C++] 항목25 : 예외를 던지지 않는 swap에 대한 지원도 생각해 보자

※ 특수화, 부분 특수화에 대한 이해가 선행되어야 하는 항목이다. >참고 1. 함수 템플릿과 클래스 템플릿 2. C++ 템플릿 특수화/부분 특수화 - 간단 3. C++ 함수 부분 특수화 - 상세 swap 두 객체의 값을 맞바꿈 자기대입 현상(항목 11)의가능성에 대

4일 전
·
0개의 댓글
·

[Effective C++] 항목24 : 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자

일반적으로 클래스에서 암시적 타입 변환을 지원하지 않는 것이 좋다.그러나 이 규칙에는 예외가 있는데, 가장 흔한 예외는 숫자 타입이다.C++에서 기본으로 제공하는 int->double처럼 정수->유리수 암시적 변환을 허용하기 위해 explicit을 붙이지 않았다.수치연

2023년 5월 17일
·
0개의 댓글
·

[Effective C++] 항목23 : 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자

WebBrowser에 선언한 3가지 함수의 동작을 한 번에 하는 함수 clearEverything을 만들어보자.당연히 멤버 함수가 더 낫다고 생각하겠지만 이러한 경우 비멤버 함수를 채택해야 한다.객체 지향 법칙에 따르면 할 수 있는 만큼 데이터를 캡슐화해야 한다. 그렇

2023년 4월 23일
·
0개의 댓글
·

[Effective C++] 항목22 : 데이터 멤버가 선언될 곳은 private 영역임을 명심하자

데이터 멤버가 public이 아니어야 하는 이유 1. 문법적 일관성 데이터 멤버가 모두 public이 아니라면, 사용자가 어떤 객체에 접근할 수 있는 유일한 수단은 멤버 함수이다. 다시 말해서 클래스의 공개 인터페이스에 있는 것이 함수뿐이라면, 그 클래스의 멤버에 접근

2023년 4월 23일
·
0개의 댓글
·

[Effective C++] 항목21 : 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자

항목 20을 본 후 pass by value를 척살하려는, 모든 코드를 오직 reference to const로만 전달하려는 사람들도 있을 것이다. 이러한 사고방식은 좋지 않다.operator\* 함수가 반환하는 참조자는 이미 존재하는 Rational 객체를 참조한 이

2023년 4월 12일
·
0개의 댓글
·

[Effective C++] 항목20 : '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달'방식을 택하는 편이 대개 낫다

C++은 함수로부터 객체를 전달받거나 함수에 객체를 전달할 때 기본적으로 값에 의한 전달(pass by value) 방식을 사용한다. 함수의 매개변수는 실제 인자의 사본을 통해 초기화되며, 어떤 함수를 호출한 쪽은 그 함수가 반환한 값의 사본을 돌려받는다.이 사본은 복

2023년 4월 9일
·
0개의 댓글
·

[Effective C++] 항목19 : 클래스 설계는 타입 설계와 똑같이 취급하자

새로운 클래스를 정의한다는 것은 새로운 타입을 정의하는 것과 같다. 우리는 클래스 설계자에 그치지 않고 타입 설계자라는 막강한 권위를 가지고 있다는 것이다. 따라서 클래스를 설계할 때는 마치 언어 설계자가 그 언어의 기본제공 타입을 설계하면서 들인 것과 같은 정성과

2023년 4월 9일
·
0개의 댓글
·

[Effective C++] 항목18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자

인터페이스 C++에서 함수, 클래스, 템플릿 등이 모두 인터페이스에 해당한다. 인터페이스를 사용했는데 결과 코드가 사용자가 생각한 대로 동작하지 않는다면 애초에 컴파일되지 않아야 한다. 반대로 어떤 코드가 컴파일된다면 사용자가 원하는 대로 동작해야 한다. Date 클

2023년 4월 5일
·
0개의 댓글
·

[Effective C++] 항목17 : new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자

동적 할당한 객체를 스마트 포인터에 저장하기 자원을 관리할 때는 객체를 사용하면 좋으므로(항목 13) processWidget 함수를 동적 할당된 Widget 객체에 대한 스마트 포인터를 사용하도록 만들었다. 컴파일 에러! processWidget 함수를 호출하는

2023년 4월 4일
·
0개의 댓글
·

[Effective C++] 항목16 : new 및 delete를 사용할 때는 형태를 반드시 맞추자

언뜻 보면 문제 없어 보이는 코드이다. new로 메모리를 할당하고 delete로 해제했기 때문이다. 그러나 이 코드는 미정의 동작으로 빠져버린다. 설령 동작하더라도 stringArray가 가리키는 100개의 string 객체들 중 99개의 객체들은 소멸하지 못할 것

2023년 4월 1일
·
0개의 댓글
·

[Effective C++] 항목15 : 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자

항목 13, 14에서 배운 것을 토대로 자원 관리 객체를 사용한다면, 직접 자원에 접근하지 않으면서 자원 누출에 대한 걱정을 지울 수 있다.그러나 수많은 API들은 자원을 직접 참조하도록 만들어져 있다.결국 자원 관리 객체의 보호를 넘어 실제 자원에 직접 접근해야 할

2023년 3월 28일
·
0개의 댓글
·

[Effective C++] 항목14 : 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자

힙에서 생기는 자원들은 항목13에서 언급한 uniqueptr, sharedptr과 같은 스마트 포인터로 자원을 관리하면 된다. 그러나 힙이 아닌 공간에서 생성된 자원은 스마트 포인터로 처리하기 적합하지 않다. 이럴 때는 스스로 자원 관리 클래스를 만들어야 한다. 자원

2023년 3월 26일
·
0개의 댓글
·

[Effective C++] 항목13 : 자원 관리에는 객체가 그만!

서론 프로그래밍에서 자원은 사용을 마치고 나면 시스템에 돌려주어야 하는 모든 것을 말한다. C++ 프로그램에서 자원은 대표적으로 동적 할당한 메모리가 있으며, 이 외에도 file descriptor, mutex lock, GUI 리소스, DB 연결, 네트워크 소켓 등등

2023년 3월 25일
·
0개의 댓글
·

[Effective C++] 항목12 : 객체의 모든 부분을 빠짐없이 복사하자

객체 복사 함수 복사 생성자 복사 대입 연산자 사용자가 직접 객체 복사 함수를 구현하고 어쩌구 코드 이때 데이터 멤버를 하나 추가하지만 복사 함수는 그대로라면 복사 함수의 동작은 완전 복사가 아니라 부분 복사가 된다.(name은 복사, lastTransaction

2023년 3월 22일
·
0개의 댓글
·

[Effective C++] 항목11 : operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자

자기대입 어떤 객체가 자기 자신에 대해 대입 연산자를 적용하는 것 언뜻 봐서는 이런 자기 대입 코드를 누가 쓰겠냐 싶지만 많은 사용자들이 이런 코드를 작성하게 된다. ex... 이러한 자기대입이 생기는 이유는 여러 곳에서 하나의 객체를 참조하는 상태인 중복참조(a

2023년 3월 21일
·
0개의 댓글
·

[Effective C++] 항목10 : 대입 연산자는 *this의 참조자를 반환하게 하자

C++의 대입연산은 여러 개가 사슬처럼 엮일 수 있다.위의 코드를 풀어쓰면 다음과 같다.15가 z에 대입되고, 그 대입 연산의 결과(갱신된 z)가 y에 대입, 또 그 대입 연산의 결과(갱신된 y)가 x에 대입된다.이렇게 대입 연산이 사슬처럼 엮이는 것은 대입 연산자가

2023년 3월 20일
·
0개의 댓글
·

[Effective C++] 항목9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자

다음은 주식 거래(매도 주문, 매수 주문, ...)를 본떠 만든 클래스들이다. 생성자 아래의 코드가 실행되면 어떤 일이 발생할까? TransAction 생성자가 호출된 뒤 BuyTransaction 생성자가 호출된다. 그런데 위의 코드를 보면, TransAct

2023년 3월 20일
·
0개의 댓글
·
post-thumbnail

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 레지스터 기초

데이터 단위 8 bit = 1 byte 16 bit = 2 byte = 1 word 32 bit = 4 byte = 2 word = 1 dword (double-word) 64 bit = 8 byte = 4 word = 1 qword (quad-word) 레지스터

2023년 2월 26일
·
0개의 댓글
·

[Effective C++] 항목8 : 예외가 소멸자를 떠나지 못하도록 붙들어 놓자

사용자가 직접 DBConnection 객체에 대해 close를 호출해야 하는 코드이다. 그러나 사용자가 close를 호출하는 것을 잊을 수도 있다. 이를 방지하기 위해 DBConnection에 대한 자원 관리 클래스(DBConn)를 만들고, 그 클래스의 소멸자에서 c

2023년 2월 21일
·
0개의 댓글
·