반응형 분류 전체보기1342 [C++] 임시(temporary) 객체 임시 객체• Point p1(1, 2) ; → named object → 선언한 블록을 벗어날 때 파괴 • Point(3, 4); → 임시 객체 (unnamed object) → 선언한 문장의 끝에서 파괴#include struct Point{ int x, y; Point(int a = 0, int b = 0) { std::cout 문장 끝나자마자 소멸되는 것을 확인할 수 있다.[예제] 임시객체 특징• 임시 객체는 rvalue로 등호(=)의 왼쪽에 올 수 없다. • 임시 객체는 주소를 구할 수 없다. (생성자에서 this 사용할 수 있다.)#include using namespace std;struct Point{ int x, y; Point(int a = 0, int b = 0) { cout er.. 2025. 4. 26. [C++] 소멸자 함수 소멸자클래스 이름과 동일한 이름의 멤버함수로함수명 앞에 「~」 붙여 생성자함수 이름과 구별#include using namespace std;class A{ int no;public: A() {} ~A(); // 마무리 할 작업이 없으면 굳이 명시할 필요는 없음};A::~A(){ cout 특징• return type 명시할 수 없다. • 자동으로 호출되는 멤버함수로 인수 전달 받지 않는 형식 • 체가 메모리에서 제거되기 전 마지막으로 호출되는 함수로 주로 마무리 작업 용도 • delete 키워드 동일한 역할 • friend, static, const로 둘 수 없다.RAII(Resource Acquisition Is Initialization)Bjarne Stroustrup의 “자.. 2025. 4. 25. [C/C++] 메모리 영역(스택, 힙, 데이터 영역) C++ 프로그램에서 메모리 사용 방식은 크게 4가지 존재한다.• 스택• 힙• 데이터• 코드스택(Stack) 영역• 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역• 함수 호출이 완료되면 사라짐void foo(){ int x = 10; // x는 스택에 저장됨}힙(Heap) 영역• 필요에 의해 동적으로 메모를 할당할 때 사용 • new, malloc 등을 통해 메모리 요청 • delete, free 메모리 해제int* ptr = new int; // 힙에 int 저장공간 할당*ptr = 20;delete ptr; // 메모리 해제데이터(Data) 영역• 전역 변수와 static 변수가 할당되는 영역 • 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리에서 소멸int g.. 2025. 4. 20. [C/C++] 정의된 매크로 (__FUNCTION__ __DATE__ 등) 정의된 매크로매크로 중에는 이미 약속되어 있는 매크로 존재컴파일러 종류와 버전에 따라 다를 수 있다. __FILE__ 전체 디렉터리 경로를 포함한 파일명 __FUNCTION__ 매크로명이 사용된 함수 이름 __LINE__ 매크로명이 사용된 행 번호 __DATE__ __TIME__ 컴파일 시작한 날짜와 시간 [예시 코드]#include void handleError(const char* errorMessage){ std::cerr 결과 예시이외의 다양한 매크로__GNUC__ (GNU 컴파일러 사용 여부 및 버전) __cplusplus (C++ 표준 버전)와 같이 다양한 매크로도 있으니 찾아보면 좋을 것 같다.#include int main(){#if __cplusplus >= 202002L st.. 2025. 4. 12. [C] 포인터 변수 개념 포인터포인터 변수란 메모리의 주소 값을 저장하기 위한 변수#include #include int main(void) { int num = 7; int* p; // 포인터 변수 선언 p = # // num의 주소값을 포인터 변수 p에 저장 printf("%d", *p); // 포인터 p가 가리키고 있는 실제값 출력}포인터 변수 p이 int형 변수 num을 가리킨다.포인터 변수는 double *p;와 unsigned int *p; 같이 선언 포인터 형(type)은 메모리 공간을 참조하는 기준이 됩니다. - int (4 byte), double (8 byte)#include #include int main(void) { double num = 3.14; // doubl.. 2025. 3. 30. [C/C++] 비트 필드 구조체 비트 필드 구조체 (Bit Field Struct)• 멤버 크기를 비트 단위로 설정• 메모리 절약하면서 하드웨어 레지스터 직접 관리• 여러 bool 타입 관리에 유용 ex) 플래그 설정 #include // 비트 필드 구조체 정의struct BitField { unsigned int a : 1; // 1비트 unsigned int b : 2; // 2비트 unsigned int c : 3; // 3비트};void main() { struct BitField bf = { 1, 2, 5 }; printf("a: %u\n", bf.a); printf("b: %u\n", bf.b); printf("c: %u\n", bf.c); printf("크기: %d\n", s.. 2025. 3. 23. [C++] noexcept noexcept 키워드• 함수가 예외가 있는지 없는지 조사• 함수가 "예외 없음"을 표시 #include void f1() { }void f2(int a, int b) { throw 1; }int main(){ bool b1 = noexcept(f1()); bool b2 = noexcept(f2(1, 2)); printf("%d %d\n", b1, b2); // ?}실제 함수 실행하는 것이 아니다. 함수 구현부까지 확인하는 것이 아니다. 그렇기에 f1 에서 예외가 없더라도 컴파일러는 알 수 있는 방법이 없다.함수가 예외 없음을 알리려면 함수 선언 뒤에 noexcept 키워드를 붙인다.#include void f1() noexcept { }void f2(int a, int b) { throw 1; }int.. 2025. 3. 20. [C++] RAII & stack unwinding 💡 stack unwinding (스택 풀기)예외 발생으로 catch 처리되는 중간과정에서 만들어진 stack 에 있는 모든 변수(객체)는 소멸되었기 때문이다. [예제]Q) f2() 에서 throw 예외 발생할 때 f1() 온전한 수행을 할 수 있을까?#include struct Object{ ~Object() { printf("~Object 소멸자\n"); }};void f2(){ printf("f2 start\n"); throw 1; printf("f2 end\n");}void f1(){ printf("f1 start\n"); Object obj; f2(); printf("f1 end\n");}int main(){ try { f1(); } catch (...) { printf("catch..... 2025. 3. 19. [C++] 오류 처리 방식 (Error Handling) 오류 처리 방식 (Error Handling)① 약속된 함수 반환값 ② 예외(Exception) 사용 ③ 성공/실패 결과가 모두 담을 수 있는 타입 반환 [예제]Connect 실패 시 어떻게 처리할 것인가?→ 프로세스 종료하거나 오류 처리를 해주어야 한다.int connect(){ // sth...}int main(){ connect();}[예제] 약속된 반환값#define ERROR (-1)int connect(){ bool ret = false; // Sth... if (ret == false) { return ERROR; }}int main(){ connect();}[단점] 간단한 함수라면 약속된 반환 값으로 처리할 수 있지만 해당 반환 값이 어떤 의미인지 숙지해야 한다. ex) 반환 값이 실제.. 2025. 3. 17. [C++] 깊은 복사 (Deep Copy) 깊은 복사 (Deep Copy) 객체 복사할 때,원본 객체가 가지고 있는 데이터를 새로운 메모리 공간에 복사하여완전히 독립적인 객체를 만드는 방식 💡 깊은 복사가 필요한 경우 ✅ 클래스 내부에 포인터 멤버 변수가 존재할 때 ✅ 동적 메모리를 개별적으로 관리해야 할 때 ✅ 동일한 데이터를 공유하지 않고, 독립적인 복사본이 필요할 때 📌 [C++] 얕은 복사 (Shallow Copy) [C++] 얕은 복사 (Shallow Copy)얕은 복사 (Shallow Copy)• 메모리 자체를 복사 하지 않고 주소만 복사• 일반적으로 「=」 연산자가 해당 [예제] 복사성생자 & 대입 연산자#include class Point{ int x = 0; int y = 0;public: Point() = default; .. 2025. 3. 16. 이전 1 2 3 4 ··· 135 다음 반응형