new[] 관해서는 typedef가 독이지만, typedef 는 사실 여러 방면으로 쓸모가 많다. 나 같은 경우에는 .. 컨테이너 사용 할때, 컨테이너의 이터레이터를 줄이기 위해서 사용 하곤 한다. 하지만 typedef의 진정한 의미는 바로 따로 있다. 진정한 의미 C++ 에서의 typedef 는 가독성과 코드 수정을 한줄로 만들어 줄께와 같다. 여기서 가독성은 쉽게 이해가 가는데 C++ 에서의 코드 수정은 좀 갸우뚱 할 것이다. C++ 은 OOP 적으로 코딩이 가능한데, OOP의 꽃~ 캡슐화와 typedef 와 맞물리면 코드 수정이 엄청나게 간편해 진다. 예를 들어, 데이터를 관리하기 위해서 컨테이너를 골라야 했다. 대부분의 데이터가 마지막에 들어가고, 마지막에서 지워 진다는것을 알게됬고 나는 VECT..
Don't C++ 검색 결과
이 코드를 우선 보면 #include using namespace std; typedef struct { unsigned int a; int b; int c; } TEST, *LPTEST; int main(void) { LPTEST test_data; LPTEST aaa; aaa = (TEST *)malloc(sizeof(TEST)); aaa->a = 1; aaa->b = 2; aaa->c = 3; DWORD test = (DWORD)aaa; test_data = (LPTEST)test; } 이해하기 쉬운가? 갑자기 포인터에 DWORD로 형 변환시켜서, 저장한 다음에, 그것을 다시 LPTEST 형으로 다시 변환시켜서 ... 쓴다. 애초에 void* 로 넘겨 버려서 사용한다면, 더 가독성이 좋을텐데 말이다..
개인적으로 점점 코딩은 중요한게 아니라고 생각이 된다, 어떤것을 분리하는 개념, 어떤 쌓아두는 개념, 어떤 연산 처리하는 개념, 어떤 곳을 청소 하는 개념 어떤 비용을 지불하는 개념 등등등... 어떤 이런 개념들이 더 좋은 방식의 코딩 스타일, 설계 방식이 나온다고 생각이 되어 간다고 생각된다. 현재 나는 이런 생각을 하지 않는다면, ... 막장 코더로 가기 직전일듯 싶다. 기초가 되는 개념은, "지연평가"와 "선행평가"를 언제 할까 결정하는 개념이다. C++ 은 정말 매력있는 언어임이 틀림 없다.
static 키워드는 무엇일까? 객체를 정적 객체로 만들어 준다. 정적 객체는 무슨 뜻인가? 정적 객체는 이것이 생성된 시점부터, 프로그램 종료될 때까지 소멸되지 않는 객체를 뜻한다. 또한 정적 객체에는 지역 정적 객체(local static object)와 비지역 정적 객체(non-static object)로 나뉜다. 왜 간과하지 말아야 하는가? 이런 정적 객체들이 언제 선언되고 정의 되는지 파악하기가 어려울 때가 있곤 하기 때문이다. 또한 이 의미를 잘못 이해하여, 클래스 멤버 변수로써 static을 했을때, 각 객체마다 이 정적 멤버 변수를 가지는 것으로 오해할 수 있으나, 그 클래스에서 전부 한개의 정적 멤버 변수를 사용 한다. 한 파일에서 선언된 비지역 정적 객체의 경우, 다른 파일에서 사용 할..
언제 많이 사용 하는가? 팩토리 함수에서 많이 쓰인다. 팩토리 함수란? 함수 인자값을 통하여 계통적인 클래스의 각각에 맞는 파생 객체를 동적으로 생성해주는 함수 왜 이것이 문제인가? new의 주소값을 리턴하게 되면, 그 책임이 호출자에게 있어 면책 될 수 없기 때문이다(즉. 호출자가 책임져야 한다!) 효율적인 측면에서 본다면? 함수 내부에서만 쓰이는 변수라면 표현식으로 객체 선언하는것이 좋다, 함수가 끝날때 자동으로 객체의 자원을 반환해 주기 때문이다, 일전에 이런 기본적인 사항을 모른채, 함수 내부에서 new를 쓰고 delete를 하는 우를 범했다. 가뜩이나 new 연산자는 표현식 보다 600배나 더 느리다!(간단하게 실험해 보면 금방 알수 있다.) (팩토리 함수의 역활이 필요하다면, 동적메모리 생성 ..
어떤 경우이냐면? 1. 클래스의 멤버 모든 객체를 초기화를 하려 할때 memset(this, 0, sizeof(this); 를 이용할 경우 왜냐하면 1. 가상테이블이나, 0으로 초기화 되면 안되는 것들이 0으로 초기화 되기 때문에, 이런 객체 사용시 신비스러운 동작을 한다. 주의점 1. 정확하게 해당 클래스의 데이터영역과 0으로 채워져야 할 부분을 제외하고 한다면 문제는 없지만, 조금 편해지려고 찾기 힘든 벌레를 키울수 있는 점은 이해해 두고 있어야 한다. 관련 링크 http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=97
최근댓글