인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게하자. 인터페이스는 c++에서 쓰이는 함수, 클래스, 템플릿 등을 모두 포괄하는 의미이다. 사용자가 저지를 수 있는 오류에는 여러가지가 있고, 개발자는 그러한것들을 최대한 줄일 수 있도록 여러 안전 장치들을 마련해 놓을 필요가 있다. 예제 1 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ..
new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자. new를 사용하여 생성한 객체를 스마트 포인터등에 저장 할 때 단계가 많거나 복잡할 수 록 메모리 누수가 발생 할 수 있다. 예제 1 1 2 3 4 5 6 7 8 9 10 11 12 //우선 순위를 알려 주는 함수 int priority(); //동적으로 할당한 Widget객체에 대해 어떤 운선순위에 따라 처리를 적용하는 함수 void processWidget(std:tr1::shared_ptrpw, int priority); void main() { processWidget(std:tr1::shared_ptr(new Widget),priority()); } Colored by Color Scripter cs 어디서든 잘..
new 및 delete를 사용할 때는 형태를 반드시 맞추자 동적할당 연산자 new, delete를 사용 할 때 형태를 일치 시켜야한다. 사용법 int* pnCount = new int; delete pnCount; int* pArryCount = new int[100]; delete [] pArryCount; 예제 1 std::string *pStringArray = new std::string[100]; delete pStringArray; 위 코드와 같이 사용하면 pStringArray가 가리키는 100개의 string 객체들 가운데 99개는 정상적인 소멸 과정을 거치지 못합니다. new를 사용하여 동적 메모리가 할당을 시도하게 되면 그 과정에서 std::string()의 생성자는 할 당 된 수 만큼..
자원관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // 항목 13에서 가져온 예제 void main() { std::tr1::shared_ptr pInv(createInvestment()); // 투자금이 유입된 이후로 경과한 날수 int dayHeld(const Investment *pi); // 에러 int days = daysHeld(pInv); /* daysHeld함수는 Investment * 타입을 원하는데 std::tr1::shared_ptr타입의 객체를 넘기고 있음 std::tr1::shared_ptr을 Investment *로 변환하고 싶어짐 */ } Colored by Color Scrip..
자원관리 클래스의 복사 동작에 대해 진지하게 고찰하자. 객체 복사에서는 컴파일러가 제공하는 디폴트 함수(복사 생성자, 대입연산자등)가 자신이 원하는 동작을 못한다면 직접 설계하여야 한다. 힙 기반 자원 관리의 스마트 포인터는 힙에 생기지 않는 자원의 처리로는 부적합하다. 이 경우 자원 관리 클래스를 만들어야 할 필요성이 있다. 예제 Mutex 타입의 동기화 객체의 잠금과 해지 클래스 생성 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 void lock(Mutex *pm); // pm이 가리키는 뮤텍스의..
자원 관리에는 객체가 그만!1234567891011121314151617181920//여러 형태의 투자를 모델링한 클래스 계통의 최상위 클래스class Investment { . . . }; /*Investment 클래스 계통에 속한 클래스의 객체를 동적 할당하고 그 포인터를 반환합니다. 이 객체의 해제는 호출자 쪽에서 직접 해야 합니다.*/Investment* createInvestment(); void f(){ //팩토리 함수를 호출합니다. Investment *pInv = createInvestment(); // pInv를 사용합니다. // TODO // 객체를 해제합니다. ..
- Total
- Today
- Yesterday
- 외돌개
- DLL
- Build
- OpenSource
- 블루버블
- 울릉도
- 스쿠버다이빙
- 제주도
- 티스토리챌린지
- C# 고급 기술
- C#.NET
- C++
- 서귀포블루버블
- Linux
- 네트워크 정보
- PowerShell
- 암호화
- 블루버블다이브팀
- 스쿠버 다이빙
- Windows
- 현포다이브
- C
- script
- 서귀포
- 패턴
- 오블완
- CMake
- C#
- 성산블루버블
- 블루버블다이빙팀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |