Programming/C++ 7

[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