- 책_곽용재님 홈페이지
- 책_노란북 - 책 가격비교
- 책_김재우-SICP번역
- 플밍_쏘쓰포지
- 플밍_CodingHorror ?
- 플밍_상킴
- 플밍_김민장님
- GPGStudy
- 플밍_미친감자님
- 플밍_jz
- 플밍_샤방샤방님
- 플밍_글쓰는프로그래머2
- 플밍_키보드후킹
- 사람_재혁
- 사람_kernel0
- 사람_박PD
- 사람_경석형
- 사람_nemo
- 사람_kikiwaka
- 사람_Junios
- 사람_harry
- 사람_어떤 개발자의 금서목록..
- 사람_모기소리
- 사람_낙타한마리
- 사람_redkuma
- 사람_영원의끝
- 사람_민식형
- 도스박스 다음카페
- 플레이웨어즈 - 게임하드웨어벤치마크
- http://puwazaza.com/
- David harvey의 Reading Marx's c…
- 씨네21
- 한겨레_임경선의 이기적인 상담실
- 본격2차대전만화 - 굽시니스트
- 영화_정성일 글모음 페이지
- 영화_영화속이데올로기파악하기
- 음식_생선회
- 죽력고
- 사람_한밀
- 플밍_수까락
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 삼국지6
- 정신분석
- modernc++
- Programming
- 책
- 단상
- 정성일
- 건강
- 노무현
- 고등학교 사회공부
- 태그가 아깝다
- BSP
- 일리아스
- 소비자고발
- 영화
- 유시민
- 프로그래밍
- programming challenges
- 진중권
- 진삼국무쌍5
- template
- 유머
- 고전강의
- c++
- 김두식
- 삼국지
- 강유원
- 게임
- 인문학
- stl
- Today
- Total
목록프로그래밍 (56)
lancelot.com
range_for 를 이용해서 화면에 출력 #include #include int main() { std::vector v = { 1,2,3,4,5 }; for (auto e : v) std::cout
Dog 포인터가 Animal의 포인터에 대입가능하면, smartptr 의 포인터도 smartptr 의 포인터에 대입가능해야한다. template 생성자 필요 template class smartptr 을 friend 로 선언 필요 (생성자에서 private member에 접근해야하므로) class Animal {}; class Dog : public Animal {}; template class smartptr { T* ptr = nullptr; public : smartptr() = default; smartptr(T* p) : ptr(p) {} //smartptr(const smartptr& sp) {}// 같은 타입만 받을 수 있다. //smartptr(const smartptr& sp) {}// ..
객체 뿐만아니라 비교 기준이 되는 멤버 값으로도 검색 가능하게 하려면 People 객체와 문자열로 비교 가능해야한다 비교 함수객체안에 is_transparent 멤버타입이 있어야한다. (C++14) 신기하네... 나중에 시간나면 더 찾아봐야겠다. #include #include struct People { std::string name; int age; People(std::string name, int age) : name{ name }, age{ age } { } }; struct PeopleCompare { bool operator()(const People& p1, const People& p2) const { return p1.name < p2.name; } bool operator()(cons..
멤버 변수의 초기화를, 상속받는 부모클래스보다 먼저하고싶을때, 그 멤버 변수를 가지는 클래스를 만들어서, 부모클래스보다 앞에서 상속받으면 된다 이렇게까지 해야하는 곳이 있을까.. 싶고, 상속 순서에 따라 초기화가 결정되도록 하면, 나중에 복잡해질 경우에 문제가 생기지 않을까.. 싶기도 한데... 어쨌든 답답하면 써야지..ㅋ #include class Buffer { public : Buffer(std::size_t size) { std::cout
container 안의 item을 증가시키고 싶을때 ++ 등을 사용하는 것보다 advance를 사용하면, container가 달라도 같은 구현을 유지할 수 있어서 좋다. std::advance(it, N) 반복자 it를 N만큼 이동하는 알고리즘 반복자의 종류(category) 에 따라 +또는 ++ 연산자 사용 advance 구현방법 tag_dispatching : C++98 enable_if : C++11 if constexpr : C++17 concept & requires clauses : C++20 #include #include #include #include int main() { //std::vector c = { 1,2,3,4,5,6,7,8,9,10 }; std::list c = { 1,2,..
소멸자를 proteced 로하면 객체를 힙에만 생성할 수 있다. #include class RefCount { int refcnt = 0; public : void addRef() { ++refcnt; } void release() { if (--refcnt == 0) delete this; } // 소멸자를 protected로 하면 외부에서 소멸이 불가능해져서 // 1. delete 불가능 (소멸자 호출이 불가능하므로) // 2. 지역변수 생성 불가 (지역변수가 소멸될때 소멸자를 호출 할 수 없어서) - 객체를 힙에만 생성할 수 있다. protected: virtual ~RefCount(){std::cout release(); } C++11 에 도입된 thread safe 한 atomic 을 적용 #i..
allocator 메모리 할당관련 함수를 추상화한 도구 메모리 할당 방식을 쉽게 변경할 수 있게 해준다. std::allocator C++ 표준 메모리 할당기 기본 구현은 operator new() / operator delete() 사용 allocator 멤버함수 - 사용자 정의 allocator를 만들기위해서는 아래 멤버함수 구현 필요 allocate : 메모리 할당 construct : 생성자 호출 destroy : 소멸자 호출 deallocate 메모리 해제 사용자정의 allocator를 STL에 전달하려면 default constructor template constructor value_type member == 연산, != 연산 이 가능해야한다 #include #include"point.h"..
// default 생성자가 없다 class Point { int x=0; int y=0; public : //Point() = default; Point(int x, int y) : x(x), y(y) {} }; Generic Container IDioms Generic (template 기반) container를 설계할때, 저장되는 "타입이 가져야하는 요구조건을 최소화" 하도록 한다 STL container 에 저장되는 타입의 최소요구조건 : 복사생성이 가능해야한다 아래 예시에서 new T[sz] : T 타입은 반드시 default constructor 를 가져야함 메모리 할당과 호출을 분리하면 더욱 유연한 container가 된다 operator new() 로 메모리할당 placement new 를..
std::unique_ptr 소유권 독점의 스마트포인터 복사는 할 수 없지만, 이동(move)은 가능 member type pointer element_type deleter_type member function operator*, operator-> operator[], operator bool swap, release, reset get, get_delete make_unique make_unique_for_overwite
empty class member는 크기에 포함되지 않음 [[no_unique_address]] : Empty class 일 때, 독립적인 주소를 가질 필요가 없다 C++20 에서 추가 // Visual Studio 2022 는 2022/07/24 현재 지원하지 않음 #include struct Empty1 {}; struct Empty2 {}; struct Data1// sizeof : 4 { [[no_unique_address]] Empty1 e1; [[no_unique_address]] Empty2 e2; int data; }; struct Data2// sizeof : 1 { [[no_unique_address]] Empty1 e1; }; struct Data3// sizeof : 1 { [[no..