'new'에 해당되는 글 2건

Programming/.NET

C#에서 개체는 new로 할당될 수 있습니다.

 

static void Main(string[] args)
{
    MyClass m = new MyClass();
}

 

그런데 개체를 생성하고 난 후 해당 개체를 명시적으로 해제하고자 한다면 개체를 생성한 클래스에서 IDisposable 인터페이스를 상속해 해제에 필요한 Dispose()  메서드를 구현해야 합니다.

 

static void Main(string[] args)
{
    MyClass m = new MyClass();
    m.Dispose();
}

 

class MyClass : IDisposable
{
    public void Dispose()
    {
        this.Dispose();
    }
}

 

직접 구현한 클래스가 아닌 BCL의 다른 클래스라 하더라도 자원해제가 필요한 클래스는 IDisposable 인터페이스를 상속받고 있으므로 Dispose() 메서드를 호출할 수 있습니다. 그러나 Dispose()메서드를 호출하는 구문을 작성했어도 내부적으로 오류가 발생하면 해당 구문이 호출되지 않을 수도 있습니다.

 

static void Main(string[] args)
{
    MyClass m = null;

    try {
        m = new MyClass();
    } catch { } finally {
        m.Dispose();
    }
}

 

그래서 try ~ catch구문을 사용해 오류발생상황과는 상관없이 Dispose()를 호출할 수 있도록 해주거나

 

static void Main(string[] args)
{
    using (MyClass m = new MyClass()) {
        //
    }
}

 

아니면 using으로 감싸는 방법을 쓰는것이 좋습니다. using은 using영역이 끝나는 지점에서 개체의 Dispose() 메서드를 자동으로 호출합니다.

0 0
Programming/C C++
C++에서 Memory를 동적으로 확보하려면 new와 delete연산자를 사용해야 합니다.(함수가 아닙니다. 고로 별도의 Header File선언도 필요하지 않습니다.)

#include <iostream.h>

main()
{
  int *i;
 
  i = new int;
 
  *i = 3200;
 
  cout << "pointer i의 값 : " << *i << endl;
 
  delete i;
 
  return 0;
}


i = new int;를 통해 int형 Data를 담을 수 있는(4Byte) Memory를 확보하고 해당 int형 주소를 Pointer i에 전달합니다. 이렇게 확보된 Memory에 *i = 3200; 으로 3200이라는 값을 저장하고 그 값을 확인하고 있습니다.

확보된 Memory 공간을 활용한 후 더이상 필요없어지면 delete 연산자를 통해 Memory사용을 해제합니다.


#include <iostream.h>

main()
{
  int *i;
  int j;
 
  i = new int[10];
 
  for (j = 0; j < 9; j++)
    i[j] = j;
 
  for (j = 0; j < 9; j++)
    cout << "i배열 j[" << j <<"]의 값 " << i[j] << endl;
 
  delete [] i;
 
  return 0;
}


예제는 int형 배열 10개의 Memory공간을 확보하고 그 시작주소를 i Pointer에 전달하고 있습니다. 첫번째 for문을 통해 i배열에 값을 넣고 두번째 for 문에서 해당 배열의 값을 확인하고 있습니다.

마지막으로 delete를 통해 Memory를 해제하는데 다만 배열의 경우 '[]' 구문을 추가하여야 합니다.


이때 만일 일차원이 아닌 다차원배열을 동적확보하고자 할 경우에는 다음과 같이 처리해야 합니다.

char (*s) [20];
s = new char[10][20];

즉, 원하는 배열크기를 가지는 Pointer를 먼저 선언하고 그 배열크기에 맞는 다차원배열을 선언해야 하는 것입니다. 동적 Memory할당은 Pointer의 선언과 할당을 별도로 해도 되고 아니면 선언과 동시에 수행할 수도 있습니다.

int *i = new int;

단일크기 확보

char *c = new char[10];

배열크기 확보

char (*s) [20] = new char[10][20];

다차원 배열크기 확보

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

[C, C++] 표준 Library 함수 - 문자열 비교 함수  (0) 2010.04.22
[C, C++] 문자와 문자열 처리(cin Object)  (0) 2010.04.16
[C, C++] Memory동적 확보  (0) 2010.04.15
[C, C++] 참조  (0) 2010.04.06
[C, C++] 함수처리  (0) 2010.04.05
[C, C++] Class구현시 Static활용  (0) 2010.04.02
0 0
1
블로그 이미지

클리엘