'값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식이 대개 낫다 CALL BY REFERENCE vs CALL BY VALUE 사본을 주고받는 값에 의한 전달은 고비용의 연산이다. 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 class Person { public: Person(); virtual ~Person(); private: std::string name; std::string address; }; class Student : public Person { public: Student(); virtual ~Student(); private: std::string schoolName; ..
클래스 설계는 타입 설계와 똑같이 취급하자. C++에서 새로운 클래스를 정의 한다는 것은 새로운 타입을 하나 정의하는 것과 같습니다. 함수와 연산자를 오버로드하고, 메모리 할당 및 해제를 제어하며, 객체 초기화 및 종료정리를 정의하는 작업, 이 모두가 여러분의 손에 달려 있습니다. 좋은 타입이란 문법이 자연스럽고, 의미구조가 직관적이며, 효율적인 구현이 한 가지 이상 가능해야 합니다. 효과적인 클래스를 설계하기 위해 고려해야 할 사항 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가? 이 부분에 따라 클래스 생성자 및 소멸자의 설계가 바뀝니다. 메모리 할당 함수를 직접 작성 할 경우에는 이들 함수의 설계에도 영향을 미칩니다. (operator new, operator new[], oper..
인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게하자. 인터페이스는 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..
- Total
- Today
- Yesterday
- 서귀포
- DLL
- CMake
- Thread
- 울릉도
- 암호화
- C#
- 패턴
- PowerShell
- Linux
- 스쿠버다이빙
- 블루버블
- 스쿠버 다이빙
- 블루버블다이빙팀
- 현포다이브
- 제주도
- C++
- 윈도우
- Build
- ip
- 외돌개
- C#.NET
- C# 고급 기술
- C
- Windows
- 리눅스
- 서귀포블루버블
- 블루버블다이브팀
- 성산블루버블
- OpenSource
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |