C에서 포인터의 난관이라면 '포인터의 개념' 자체에서 비롯된 문제였다면C++에서 포인터로 인한 문제는 많은 경우 할당과 해제로 인한 것이라고 보인다. 다음의 예시를 보자.void foo() { int* ptr = new int; bar(ptr); // throws exception delete ptr; } bar함수는 int 포인터를 인자값으로 받아 무언가를 처리하는 함수이다. 이때 잘못된 값이 들어가 bar가 예외를 throw했다면 delete이 작동할까? 우린 C에서 malloc과 free, C++에서 new와 delete이 한 쌍이 되도록 배웠다. 하지만 분명 쌍을 맞췄지만 의도찮게 delete까지 도달되지 않는 경우, 어떻게 해야할까? 이때 활용되는 것이 RAII기법을 활용한 포인터의 관리이다. ..
C++을 사용하면서 자료를 다루는 class는 수도 없이 많이 사용될 것이다. 하지만 그 자료가 완전히 메모리에 안전한 인스턴스일 수도 있고, raw pointer일 수도 있을 것이다. 이 때에 맞추어 각 class를 구성하는 방법에 대하여 알아보자. Rule of zero : 소멸자, 복사/이동 생성자, 복사/이동 할당연산자가 정의되어있는 class의 wrapper class는 다음의 꼴을 가진다. class Test { private: std::string s; public: Test(const std::string &s) : s(s) {} }; 소멸자, 복사, 이동 생성자, 복사, 이동 할당연산자가 정의되어있는 class는 OOP 단일 책임 원칙에 따라 새로운 소멸자, 생성자, 할당연산자가 정의되어..
- Total
- Today
- Yesterday
- vector
- c++ 상속
- c++11
- rule_of_five
- C++ 업캐스팅
- dokdo-project
- d802
- 객체지향
- g2 korea
- cyanogenmod
- C++
- c++ struct
- nodeal
- 포인터
- rule_of_three
- CM11
- Java
- dokdo project
- G2
- LG
- PipelineContext
- inline class
- C
- f320s
- Kotlin
- dokdo 4.0.3
- OOP
- linaro
- CM10.2
- f320k
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |