반응형 프로그래밍 언어173 [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] 포인터 변수 개념 포인터포인터 변수란 메모리의 주소 값을 저장하기 위한 변수#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. [C++] 함수 객체 (function object) 함수 객체 (function object)「( )」 연산자를 재정의 해서 함수 처럼 사용 가능한 객체 📌 [C++] 연산자 재정의 (Operator Overloading) [C++] 연산자 재정의 (Operator Overloading)연산자 재정의 (Operator Overloading)사용자 정의 타입에서 +, - 등 연산자 사용할 수 있는 문법class Point{ int x = 0; int y = 0;public: Point() = default; Point(int x, int y) : x{ x }, y{ y } {}};int main(){ Point p1{ 1, 1 }; Pointzoosso.tistory.com [예제] 함수 객체 p.operator()(1, 2) 와 같은 형태로 사용#inc.. 2025. 3. 15. 이전 1 2 3 4 ··· 18 다음 반응형