ecsimsw

Dynamic allocated array 본문

Dynamic allocated array

JinHwan Kim 2019. 5. 5. 01:05

constructor

ary = new int*[count_rows];
for (int i = 0; i < count_rows; ++i)
ary[i] = new int[count_columns];

destructor

 for (int i = 0; i < count_rows; i++)
     delete[] ary[i];
 delete[] ary;

Array of pointers != Pointer to an array

int ary[1][2] = { 0, };
int(*ptr1)[2];
int** ptr2;  

ptr1 = ary;
// ptr2 = ary;  Error

ptr2 = new int* [1];
for (int i = 0; i < 1; ++i)
ptr2[i] = new int[2];

std::cout << "ary : "<<ary<<std::endl; // 0045F034
std::cout << "ptr1 : " << ptr1<< std::endl;  //0045F034
std::cout << "ptr1 +1 : "<<++ptr1 << std::endl; //0045F03C  

std::cout << "ptr2 : "<<ptr2<< std::endl;  //007ABF48
std::cout << "ptr2 +1 : "<<++ptr2<< std::endl; // 007ABF4C

std::cout << sizeof(ary) << std::endl; //8 
std::cout << sizeof(ptr1) << std::endl; //4
std::cout << sizeof(ptr2) << std::endl; //4

The difference between the two is:

  1. Array of pointers is an array which consists of pointers. Each pointer in the array points to a memory address. For example, you can have an array of Pointers pointing to several strings. This way we can save memory in case of variable length strings. ex) char *names[]={“bob”, “steve”, “Patrick”};
  2. Pointer to an array is a pointer which points to the whole array ,not just the first element of the array. This is    especially useful in case of multi dimensional arrays. ex) int (*ptr)[5] ptr points to the whole array consisting of 5 Integers.

malloc, free != new, delete

 malloc/free은 객체 초기화와 소멸을 수행하지 않기 때문에 이러한 루틴들의 사용은 대부분의 경우에 추천되지 않는다. new와 delete는 객체 초기화를 직접 수행하는 것을 피하기 위해 C++의 첫 번째 버전에서 도입되었다

malloc은 메모리를 동적으로 할당하는 것에 목적으로 두어 할당 시 생성자 호출이나 초기화가 불가능하지만, new는 할당 시 생성자 호출, 초기화가 가능하다.

realloc으로 재할당하여 이미 할당된 공간의 크기를 바꿀 수 있다. 반면 new는 같은 공간에서 재할당이 불가능하므로 소멸 후 다시 생성해야하기 때문에, 공간의 크기를 자주 변경해야하는 객체는 오히려 malloc, realloc, free를 이용하는 것이 효율적일 수 있다.

'Language > C++, C#' 카테고리의 다른 글

Array vs Pointer. MIPS aspect  (0) 2019.06.27
OOP / Duck typing / 덕 타이핑  (0) 2019.05.07
Explicit  (0) 2019.04.23
static_cast / reinterpret_cast  (0) 2019.04.23
Function pointer / 함수 포인터  (0) 2019.04.20
Comments