본문 바로가기
반응형

전체 글1338

[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.
[C++] 상속과 복사/대입 연산자 상속과 복사/대입 연산자부모-자식 상속에서 컴파일러가 알아서 만들어주는 Case가 많은데이중에서 복사 생성자 / 대입연산자 주의 사항이 있다. #include class Base{ int b;public: Base() = default; Base(int n) : b{ n } {} int Get() { return b; };};class Derived : public Base{ int d;public: Derived(int n1, int n2) : Base{ n1 }, d{ n2 } {} Derived(const Derived& other) : d(other.d) { }};int main(){ Derived d1(10, 20); Derived d2 = d1; printf("d2.b = %d\n", d2.. 2025. 3. 14.
[C++] 얕은 복사 (Shallow Copy) 얕은 복사 (Shallow Copy)• 메모리 자체를 복사 하지 않고 주소만 복사• 일반적으로 「=」 연산자가 해당  [예제] 복사성생자 & 대입 연산자#include 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 }; Point p2 = p1; // 복사 생성자 p2 = p1; // 대입 연산자}Point 클래스 안에 x, y 는 각각 매핑되어 값이 복사되어 진다. • 복사 생성자 = 객체 생성하면서 초기화 • 대입 연산자 = 객체 생성 후 넣는 것  (사용자가 만들지 않으면 컴파일러가 디폴트 복사 생성자 제공) 이러한 .. 2025. 3. 13.
[C++] 스마트 포인터(Smart Pointer) 원리 스마트 포인터(Smart Pointer)란?다른 타입의 포인터 역할을 하는 "객체"#include class Harbang{ int color;public: ~Harbang() { printf("~Harbang"); } void foo() { std::printf("foo"); }};class Ptr{ Harbang* obj;public: explicit Ptr(Harbang* p = nullptr) : obj{ p } {} ~Ptr() { delete obj; } Harbang* operator->() { return obj; } Harbang& operator*() { return *obj; } // 임시 객체 생성 막기 위해 Reference 반환};int main(){ Ptr p(new Harba.. 2025. 3. 12.
반응형