'C++'에 해당되는 글 3건

  1. 2010.09.16 new / new[] / delete / delete[] (4)
  2. 2010.09.15 C++ 레퍼런스 변수(reference variable) (4)
  3. 2010.09.09 STL 그리고 Template
Programming/C++ / STL2010.09.16 10:07
new와 delete,
new[] 와 delete[] 가 묶여야 한다고 한다.

즉,
 int *a = new int;
 delete a;

 int *arr = new int[10];
 delete[] arr; // delete arr[]; 이 아님

그렇다고 해서 링크드 리스트 처럼 다층으로 메모리를 할당하는 구조에서는
delete[] 가 자동으로 해주진 않는것으로 보인다.
(그냥 STL 쓰면 해결된다는 지인의 조언이 -_-)

[링크 : http://yesarang.tistory.com/39]
신고

'Programming > C++ / STL' 카테고리의 다른 글

c++ template  (0) 2012.05.12
리눅스에서 c++ 컴파일시 strcpy / strcat 오류  (0) 2011.10.13
new / new[] / delete / delete[]  (4) 2010.09.16
cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
Posted by 구차니

댓글을 달아 주세요

  1. 전 new 하면 html 에서 새로운 창 띄우기 밖에 모른다는 ㅎㅎ

    2010.09.16 11:12 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 배열은 특별한 경우를 제외하고는 vector로 거의 대체 할수 있다고 생각하시면 되요.
    NULL 초기화와 SafeDelete 매크로 사용을 습관화 하는것이 좋아욤~

    2010.09.16 15:48 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 음.. 일단 STL은 너무나 먼 당신이라 ㅋ
      C와 C++의 차이점부터 파악중이에요 ㅎ

      SafeDelete라.. 찾아볼께 자꾸만 많아지네요 ㅠ.ㅠ

      2010.09.16 15:52 신고 [ ADDR : EDIT/ DEL ]

Programming/C++ / STL2010.09.15 13:06
int& a;
요 &가 바로 레퍼런스 변수이다.
어떻게 보면 포인터와 비슷하지만, 다른 녀석이고, C++ 공부중에 함수 인자에서 혼동을 느끼게 한 녀석이다.

// more than one returning value
#include <iostream>
using namespace std;

void prevnext (int x, int& prev, int& next)
{
  prev = x-1;
  next = x+1;
}

int main ()
{
  int x=100, y, z;
  prevnext (x, y, z);
  cout << "Previous=" << y << ", Next=" << z;
  return 0;
}

[링크 : http://www.cplusplus.com/doc/tutorial/functions2/]
[링크 : http://www.cplusplus.com/doc/tutorial/pointers/]

위의 소스중, prevent() 함수의 두/세번째 인자가 바로 reference 변수인데,
C에서는 당연히 포인터로 넘겨주어야 할꺼라고 생각을 했는데,
C++에서는 변수를 그냥 인자로 취해줌에도 불구하고 원본의 값이 바뀐다.
(당연히.. 레퍼런스 변수란걸 모르니 이상하게 보일수 밖에 ㅠ.ㅠ)

처음에는 자동형변환과 연관이 되어있나 했는데.. 그거랑은 거리가 좀 있는것 같고
그냥 단순히 C++ 문법적 특성으로 "참조형 변수" 라고 생각중 -_-

C++ 참조와 포인터의 차이점
- 만들어지면 값 변경불가
- 위의 이유로 null로 선언불가

C++ references differ from pointers in several essential ways:

  • It is not possible to refer directly to a reference object after it is defined; any occurrence of its name refers directly to the object it references.
  • Once a reference is created, it cannot be later made to reference another object; it cannot be reseated. This is often done with pointers.
  • References cannot be null, whereas pointers can; every reference refers to some object, although it may or may not be valid.
  • References cannot be uninitialized. Because it is impossible to reinitialize a reference, they must be initialized as soon as they are created. In particular, local and global variables must be initialized where they are defined, and references which are data members of class instances must be initialized in the initializer list of the class's constructor. For example:

[링크 : http://en.wikipedia.org/wiki/Reference_%28C%2B%2B%29]

[링크 : http://hijacker.egloos.com/1379523]
[링크 : http://www.cprogramming.com/tutorial/references.html]


사족


신고

'Programming > C++ / STL' 카테고리의 다른 글

new / new[] / delete / delete[]  (4) 2010.09.16
cout 그리고 namespace  (0) 2010.09.16
C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
Posted by 구차니

댓글을 달아 주세요

  1. 요게 덩치큰 변수들을 함수 인자로 넘겨줄때 유용해요.
    구조체 같은거 넘겨 줄때 &로 받으면 포인터만 복사되기때문에 비용이 저렴하지요.

    struct foo { int a; double b; float c; }

    void boo( foo& value )
    { // Do Something }

    void main()
    {
    foo dummy;
    boo( dummy );
    }

    전 요런식으로 자주 써욤~
    주의 할건 인자가 변경되면 원본도 변경되니 변경을 원하지 않으면 const를 꼭 붙여야 한다는 것~

    2010.09.15 15:21 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 아무튼 C만 쓰다보니 C++ 문법이 정말 어색한게 많네요 ㅎ
      좋은 지도감사합니다 ㅋ

      음.. 근데 const 쓰면 에러가 나지 않나요 ㅎ

      2010.09.15 15:47 신고 [ ADDR : EDIT/ DEL ]
    • 값이 변경되는 것을 원치 않을 때 (단순 참조용 일 때) 붙이는거죠.
      void boo( const foo& value );
      요렇게요~ 'ㅂ'
      본문의 예제처럼 수정하는거면 그냥 const 없이~

      전 오히려 C++ 방식에 너무 길들여져서 C쪽이 더 낯설어여...

      2010.09.15 17:28 신고 [ ADDR : EDIT/ DEL ]
    • 요즘에는 차라리 처음부터 C++이나 JAVA 로 배웠으면 어땠을까 라는 생각을 하곤 한답니다 ㅋㅋ

      처음에 C로 시작을 하니, C스러운 사고를 하게되요 ㅠ.ㅠ

      2010.09.15 17:52 신고 [ ADDR : EDIT/ DEL ]

Programming/C++ / STL2010.09.09 09:14
STL - Standard Template Library
원래는 SGI 에서 C++ 지원용으로 개발된 템플릿이다.
[링크 : http://www.sgi.com/tech/stl/index.html]

Scott Meyers 가 작성한 Effective STL (200page)
[링크 : http://www.uml.org.cn/c++/pdf/EffectiveSTL.pdf]

Template는 c++ 에서 지원하는 기능으로
함수나 클래스등을 형(type)에 관계없이 작동시키는(generic type - 일반형) 것이라고 한다.

#include <iostream>
 
template <typename T>
const T& max(const T& x, const T& y)
{
  if(y < x)
    return x;
  return y;
}
 
int main()
{
  // This will call max <int> (by argument deduction)
  std::cout << max(3, 7) << std::endl;
  // This will call max<double> (by argument deduction)
  std::cout << max(3.0, 7.0) << std::endl;
  // This type is ambiguous; explicitly instantiate max<double>
  std::cout << max<double>(3, 7.0) << std::endl;
  return 0;
}

[링크 : http://en.wikipedia.org/wiki/Template_%28programming%29]

[링크 : http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library]
[링크 : http://www.iis.sinica.edu.tw/~kathy/vcstl/templates.htm]
신고

'Programming > C++ / STL' 카테고리의 다른 글

C++ 레퍼런스 변수(reference variable)  (4) 2010.09.15
C++0x  (0) 2010.09.15
std::vector 포인터  (0) 2010.09.13
스마트 포인터(smart pointer)  (2) 2010.09.09
C++ 강좌/문법/reference  (4) 2010.09.09
STL 그리고 Template  (0) 2010.09.09
Posted by 구차니
TAG C++, STL, template

댓글을 달아 주세요