함수에서 객체를 반환해야 할 경우에 참조자를 반환하지 말자. 참조자를 왜 반환해도 되지 않나? 매개변수가 참조자이고, 그 참조자를 반환하는 경우에는 상관이 없다. 하지만, 함수 내부에서 선언된 객체의 경우에는 크게 잘못 된다. 이유? 스택에 올라간 객체는 존재 할수 있는 범위(Scope)가 있다. 함수 내부에 선언(스택에 올려진)된 객체의 경우, 함수 종료 후 사라진다. 그러므로 안에 있던 객체를 참조자로 리턴하게되면 문제가 발생한다. 함수에서 객체를 반환하는 경우, 임시 객체를 생성하는 것을 피하기 위해 참조자를 반환하려고 시도하는 경우가 있다. 그러나 그것은 옳은 방법이 아니다. 참조자라는 것은 이미 존재하는 객체에 대한 별칭과 같은 것이다. 함수에서 스택에 임시로 생성된 객체에 대해 참조자를 반환하..
'값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식이 대개 낫다 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()의 생성자는 할 당 된 수 만큼..
- Total
- Today
- Yesterday
- effective
- 암호화
- 성산블루버블
- CMake
- Windows
- Build
- Linux
- 현포다이브
- 패턴
- C#.NET
- 제주도
- 블루버블다이브팀
- 서귀포
- C# 고급 기술
- 블루버블다이빙팀
- script
- OpenSource
- 울릉도
- DLL
- C#
- C++
- C
- 네트워크 정보
- 스쿠버 다이빙
- 서귀포블루버블
- Effective c++
- 스쿠버다이빙
- 블루버블
- PowerShell
- 외돌개
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |