new A 와 new A()에 대해

이번에는 new에 대한 이야기 이다.

몇 달 전에, Coding idiom을 정하는 쪽에서 코드의 통일성을 위해 파라미터가 없는 생성자의 생성법을 idiom으로 정리를 하자는 의견을 내었다. 간단하게 이야기 하면 new를 할 때의 코드 표기법을 new A 또는 new A() 중에 하나를 권장하는 쪽으로 가자는 것이다.

나의 경우, 처음에는 stack에서 생성할 때는 A a(); 가 아닌 A a; 를 사용해야 하므로 new 할 때도 new A()가 아닌 new A; 를 해야 한다는 주장을 하였다. 그런데 또 다른 쪽에서는 현재의 C++ 규약에서는 new A()와 new A의 동작을 각각 다르게 정의를 하고 있으므로 그 정의에 따라 결정을 하자고 했다.

그래서 문제의 방향은 new A()와 new A의 차이점을 보고 결정하기로 하였는데, C++1998과 C++2003에서 각각 정의하고 있는 new A()와 new A 의 차이점은 다음 링크에 잘 정리되어 있다.


원래 문제는 좀 더 복잡한 상태에서의 결정이지만, 이 문제를 간단하게 줄이면

- new A 는 메모리만 할당을 하며 사용자가 명세하지 않은 임의의 일을 더 하지 않는다.
- new A() 는 메모리 할당뿐 아니라 멤버의 값을 0으로 초기화 시켜 준다.

이렇게 정리가 된다.

여러 사람들이 각각의 의견을 내었고, 나는 C++1998이냐 C++2003이냐와 상관없이 (1)컴파일러가 임의의 일을 더 하지 않는 new A 방식을 택하여야만 개발자가 항상 명확한 코드를 짤 수 있다는 주장이었고, 반대 쪽의 의견은 (2)항상 0으로 초기화 시켜주어서 개발자가 실수하더라도 문제가 적어지도록 적절히 초기화가 되어야 한다라는 주장이었다.

최종적으로는 나의 의견은 채택되지 않았지만, 나는 여전이 (1)번을 주장하고 싶다. -std 옵션이 무엇이 되든 간에 코드의 consistency을 보장할 수 있다는 것, 즉 예외가 없는 규칙이 가장 좋은 규칙이라는 생각에는 변함이 없다.

사실 이래나 저래나 큰 영향은 없는 규칙이고 개인의 철학과 다양성의 문제이다 보니, 괜히 이런 결정에 브레이크를 걸어 여러 사람의 뒷다리를 잡는 일은 없어야 하기에 그냥 다수의 결정에 따랐다.

Posted by 안영기

2012/04/15 04:46 2012/04/15 04:46
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/39

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

« Previous : 1 : ... 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : 13 : ... 46 : Next »

블로그 이미지

Tizen과 GP2X WIZ와 CAANNO와 bada용 게임 개발을 하자

- 안영기

Notices

Archives

Authors

  1. 안영기

Recent Trackbacks

Calendar

«   2017/12   »
          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            

Site Stats

Total hits:
159800
Today:
5
Yesterday:
7