Programming 15

[Effective C++] Chapter 2. 생성자, 소멸자 및 대입 연산자(2)

항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 기본 클래스에 virtual 소멸자가 없다면, 파생 클래스의 소멸자 실행이 건너뛰어져 발생하는 메모리릭을 방지하도록 해야함 가상 함수를 하나라도 가진 클래스 (=기본 클래스로 사용하겠다) --> 클래스의 소멸자도 가상 소멸자여야 함 자연스럽게 소멸자가 가상 소멸자로 되어 있으면 기본 클래스구나 하고 인식할 수 있음 추상 클래스(=기본 클래스로 쓰일 목적)로 만들고 싶은 클래스 --> 순수 가상 소멸자를 선언하자(=순수 가상함수 있으면 추상 클래스) class Base { public: Base(); virtual ~Base(); } clase Object : public Base { public: Object(); ~Obj..

Programming/C++ 2022.06.12

[Effective C++] Chapter 2. 생성자, 소멸자 및 대입 연산자(1)

항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 빈 클래스라도 컴파일러가 자동으로 생성해주는 멤버함수 복사생성자 외 생성자 선언 안했을 경우 기본 생성자 따로 정의하지 않은 경우 복사 생성자 복사 대입 연산자 복사는 데이터 사본을 그대로 복사함 (얕은 복사) 소멸자 ==> 컴파일러가 자동 생성하는 함수가 있음을 인지하고 직접 선언하여 명확히 처리하자 class CClass { private: char* name; public: //기본 생성자 CClass() {} //복사 생성자 (동적할당 얕은 복사 주의) CClass(const CClass &class) {} //복사 대입 연산자 (동적할당 얕은 복사 주의) CClass& operator=(const Class &class) ..

Programming/C++ 2022.06.12

.a와 .so 라이브러리 (Dependency)

빌드? 소스코드 컴파일, 링킹, 실행까지 일련의 과정을 빌드라고 한다. 라이브러리에 의존(dependency)하는 프로그램은 라이브러리가 없으면 동작하지 않음. Library : 다른 프로그램들과 링크되기 위하여 존재하는 하나 이상의 서브루틴이나 함수들의 집합 파일 실행 파일에 linking되는 시점에 따라 두가지로 나눠진다. 정적 라이브러리 (Static Library) 동적 라이브러리 (Dynamic/Shared Library) 정적 라이브러리 빌드 시에 라이브러리의 목적 코드를 실행 파일에 복사하여 넣는 라이브러리 시스템 환경이 변해도 어플리케이션엔 아무런 영향이 없고 완성된 어플리케이션을 안정적으로 사용할 수 있다. 하지만 모든 오브젝트 코드를 실행 파일에 내장하기 때문에 메모리에 로드되는 애플리..

Programming/C++ 2022.02.26

[Effective C++] Chapter 1. C++에 왔으면 C++의 법을 따릅시다.

항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수 C++은 Multiparadigm Programming Language다. C Object Oriented C++ Template C++ STL C++? 절차지향 C → 객체지향 기능(클래스, 캡슐화, 추상화, 상속, 다형성)을 추가 → 템플릿(일반화), STL 추가 ==> 하나로 정해진 언어가 아니라서 선택한 언어 규칙에 맞춰야함 (C++: call by reference / STL은 C 포인터를 본따 만들었기 때문에 call by value 사용하기) (템플릿 관련 참고: https://www.youtube.com/watch?v=a6BQphLoTag) 항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자 선행처리자..

Programming/C++ 2022.02.15

Offset, 메모리 할당; ( #pragma pack | alignas | offsetof )

윈도우 64bit 운영체제와 임베디드 운영체제 간의 메모리 기본 할당 단위가 달랐었다 ▶운영체제 별로 메모리 기본 할당 단위가 다르다,, (64bit: 8byte / 32bit: 4byte) offset => 상대 주소 기준 주소로부터 얼만큼 떨어진 곳에 원하는 데이터 값이 있다. 고 할 때 '얼만큼 떨어진'이 offset이다 ex) 기준 주소: 100 일 때 +10 떨어진 곳에 위치해 있다고 하면 +10이 offset #pragma pack() 파라그마 팩은 메모리 할당 단위를 강제로 변경시키는 define(전처리)이다 #pragma pack(push, 1)//1바이트 단위로 정렬 방식을 바꾸고 기존정렬방식을 스택에 저장 struct Packing{ . . . } #pragma pack(pop)//스택..

Programming/C++ 2022.01.30

[Git] 기본 명령어들 (commit/push)

레파지토리 가져오기 git clone [URL] 해당 레포명으로 폴더가 만들어지고 안에 내용물 etc 현재 상태 체크하기 - staged 확인 git status - commit 확인 git log Branch - 로컬 & 원격 브랜치 보기 git branch -a - 브랜치 변경 git checkout [BRANCH] - 브랜치 생성 git branch [NEW BRANCH] - 브랜치 삭제 git branch -d [BRANCH] 수정한 파일 추가 / 저장 / 업로드 - 파일 추가하기 (반영) git add [FILE] git add . //[.]을 넣으면 지금 위치한 폴더 내용 전체 반영 - 파일 add 취소하기 git reset HEAD [FILE]//파일을 안적으면 전체 취소 - commit 하..

Programming/Git 2021.05.16

Python IP주소로 위도, 경도 위치 찾기 (latitude, longitude)

- IP주소 검색해보기 aws cloudfront를 사용하는데 어떤 주소는 aws 본사 위치가 나오고 어떤 건 aws edge server 위치를 알려주고,, 이거 뭐,, https://www.whtop.com/tools.ip IPv4 & IPv6 location: find Country, Region, City, ISP & more Free IPv6 and IPv4 location & address locator. Find Country, Region & City based on IP, Zip Code, ISP (name/url), Latitude & Longitude. Updated Dec 2020 www.whtop.com ip주소 검색 해보는 건 그래서 여기서 검색하는 걸로 바꿨다 - Python ..

Programming/Python 2020.12.04