일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- virtual inheritance
- vector size
- 더 지니어스 양면포커
- virtual function
- pointer to member data
- C++
- operator overloading
- std::vector
- c++ multi chatting room
- base from member
- increment operator
- vector capacity
- virtual destructor
- suffix return type
- virtual function table
- member function pointer
- return by reference
- discord bot
- this call
- diamond inheritance
- delete function
- std::cout
- new&delete
- placement new
- std::endl
- dynamic_cast
- constructor
- std::ostream
- conversion constructor
- c++ basic practice
- Today
- Total
목록전체 글 (99)
I'm FanJae.
1. stack unwinding#include struct Object { ~Object() { std::cout - 예제의 호출이 상당히 복잡해 보이지만, 실제로는 크게 어렵지 않은 내용이다.- 이들의 호출 관계를 조금 더 그림으로 표현해보면 아래와 같다.- 이 예제는 결국 f3()에서 throw가 일어남에 실행 결과를 보면, finish는 출력되지 않는다.void f3() { std::cout - 즉, 달리 말하면 f3()에서 바로 main 함수로 돌아왔다.- 그렇다면, f2, f1()에 있던 객체는 파괴 될것인가 파괴되지 않을 것인가? 에 대해 생각해볼 수 있다.- 이제야 실행 결과를 올려보면 아래와 같다.1-1. Stack unwinding(스택 풀기)란?- 이처럼 예외가 발생해서 catch로..
1. Error Handlingvoid db_backup(){ // 서버에 접속해서 DB를 백업하는 // 기능 수행하다가 오류가 발생했다면?}void db_clear(){}int main(){ db_backup(); db_clear();}- 함수에서 특정 기능을 수행하는 도중 오류가 발생하여, 처리해야 하는 경우 어떻게 할 것인가?① 함수 내에서 프로그램(프로세스)를 종료 - std::exit() 등의 함수 사용- 보통, 심각한 경우 사용한다.② 호출자에게 오류가 발생했음을 알린다.- 일반적인 상황에서 많이 사용한다. 1-2. 호출자에서 함수가 실패 했음을 알리는 방식① 약속된 함수 반환 값(-1 등)으로 실패 전달.- C 언어 및 대부분의 언어에서 사용② 예외(Excep..
1. Algorithm#include #include #include int main(){ std::list s = {1,2,3,4,5}; std::vector v = {1,2,3,4,5}; // 각 컨테이너에서 3을 검색하고 싶다고 할때 어떻게 할까}- 컨테이너에 검색기능을 추가한다고 가정해보자 ① 멤버 함수 find를 제공s.find(3);v.find(3);(1) 장점- 사용하기 쉽다 (2) 단점- 이 방법은 사용하기는 쉽지만, 동일한 기능을 하는 모든 컨테이너에 넣어야 한다.- 또한, 새로운 함수(기능)을 추가혀려면 모든 컨테이너에 추가해야 한다. ② 멤버 함수가 아닌 일반 함수(템플릿) 형태로 find를 제공std::find(s.begin(), s.end(), 3);std::f..
1.반복자(iterator)#include #include int main(){ int x[5] = {1,2,3,4,5}; int* p1 = x; ++p1; std::cout - 배열은 연속된 메모리이다.- 1번째 요소의 주소를 담은 포인터 변수만 있으면, ++, * 연산으로 모든 요소에 접근할 수 있다.- 반면 일반적인 list는 연속된 메모리가 아니므로 ++연산등을 통한 요소 접근은 불가능하다.- 그러나, std::list는 연속된 메모리가 아니지만, 반복자(iterator)만 있으면 ++, * 연산으로 모든 요소에 접근이 가능하다.- p2 자체가 포인터는 아니다.- 내부적으로 포인터 멤버 데이터가 있고, operator++, operator* 연산자를 재정의해 포인터처럼..
1. vector capacity vs size#include #include void check(const std::vector& v) { std::cout size 이므로 // 빠르게 동작 check(v); // c : 5 s : 4 v.shrink_to_fit(); check(v); // c : 4 s : 4 v.push_back(0); // capacity == size 이므로 메모리 재할당 필요 // 느리다. check(v); // c : ? s : 5 v.clear(); // 메모리를 제거하지는 않음. // size 만 0으로 check(v); v.resize(0); // 또는 v.clear() v.shrink_to_fit(); check(v);}- v..