본문 바로가기

전체 글27

[C++] 생성자, 소멸자, 복사생성자, 복사 대입 연산자, 복사생성 방지에 대한 얘기 C++ 에서는 기본적으로 빈 클래스를 생성하면 자동으로 생성해주는 생성자와 소멸자 등 이있다. 예를들어 는 와 같은 기능을 수행한다고 보면 된다. 매번 다 모든 생성자들과 소멸자를 생성 하는것은 아니고, 컴파일러가 필요하다고 판단될때 생성해준다. 아래와 같은 동작을 수행할 때 생성 된다. 자동으로 생성된 것을 사용하여 문제가 없으면 좋겠지만, 문제가 발생하는 경우들이 있다. 대표적으로 1 .참조자를 데이터 멤버로 가지고 있는 경우 2. 상수 객체를 데이터 멤버로 가지는 경우 두가지를 꼽을 수 있다. 위와 같은 상황에서는 직접 복사 대입 연산자를 정의해 주어야 한다. 그렇지 않으면 컴파일 오류가 발생하게 된다. 그러면, 복사생성자나 대입연산자를 자동생성하지 않는 방법은 없을까? 사본을 만들지 않고 유일한 .. 2021. 2. 17.
안전한 정수 연산을 위해 SafeInt 를 써보자 SafeInt사용 목적SafeInt는 정수 연산에 있어서 발생할 수 있는 오버플로우를 방지하는 목적으로 사용C++ 의 템플릿으로 만들어졌으며, char형에서 __Int64(long long)형 까지 모든 정수형 사용 가능정수 연산을 통한 오버플로우나, 0으로 나누었을때 발생하는 오버플로우 감지 가능 기본 정수 자료형을 사용 했을시예제 소스 - unsigned int#include int main(){unsigned int X1 = 1234567; unsigned int X2 = 1234567; unsigned int X3 = X1 * X2; std::cout 2020. 7. 13.
VS 2017 환경에서 glog 설치 및 적용 방법 설치 https://code.google.com/archive/p/google-glog Google Code Archive - Long-term storage for Google Code Project Hosting. code.google.com 위 링크 Downloads 에 들어가서 맞는 버전으로 다운로드 이 글은 0.3.3버전(glog 0.3.3.tar.gz)으로 진행, 다운로드 후 파일 압축해제 glog 기본 설정 설치경로\glog-0.3.3\vsprojects\libglog 로 들어가서 libglog.vcproj 실행 VS2017로 실행시 단방향업그레이드 진행 후 빌드 진행 debug, release 둘다 빌드 후 debug, release 폴더에 생성된 libglog.dll, libglog.li.. 2020. 7. 9.
[EC++] #define 대신 const, enum, inline을 사용해야 하는 이유 이 글은 'Effective C++' 을 읽고 정리한 내용입니다. "선행 처리자보다 컴파일러를 더 가까이하자." #define - #define은 소스코드가 어떻게든 컴파일러에게 넘어가기 전에 선행 처리자가 밀어버리고 '숫자 상수로' 바꾸어버린다. 문제점 - #define으로 정의된 코드에서 에러가 발생하게되면, ASPECT_RATIO가 아닌, 1.653으로 에러메세지가 발생하게 된다. - 위와 같은 경우에는 코드에서 1.653이 의미하는 바가 무엇인지 모를 경우에 곤란한 상황이 생긴다. const 위와같은 문제를 해결하는 방법으로 const를 이용하는 방법이 있다. 장점 - AspectRatio는 언어 차원에서 지원하는 상수 타입의 데이터이기 때문에 컴파일러에서 처리된다. - 상수가 부동 소수점 실수 .. 2020. 2. 11.