#220802~ 220803
지역변수
전역변수
[정적 메모리 할당]
[동적 메모리 할당]
[c vs c++]
동적 메모리의 할당과 해제: new와 delete
정적할당: int x;
int x[5];
<기본 자료형>
int *pi=new int;
int *pi=new int(2); // 초기값을 줄 경우
<배열>
int *pi=new int[5];
[new와 delete]
int *pi=new int;
int *pi = (int*)malloc(sizeof(int));
delete pi;
free(pi);
<new와 delete의 장점>
int main()
{
int i, n;
int* num; //num이 배열이 아니였는데 왜 바뀌었지? 고민할 필요 ㅌ
std::cout << "몇개의 숫자를 입력하시겠습니까==" << std::endl;
std::cin>>i;
num = new int[i]; //new로 동적 메모리 할당/ 배열이름 num의 첫번쨰 방의 주소
if (num == NULL) exit (1); // 종료
for (n = 0; n < i; n++)
{
std::cout << "숫자를 입력하십시오: " << std::endl;
std::cin >> num[n]; //배열의 주소는 첫 번째 방 주소이다
}
std::cout << "당신이 입력한 숫자는: " << std::endl;
for(n=0; n<i; n++)
std::cout << num[n] << ", ";
delete[] num;
return 0;
}
// getter, setter 쭉쭉
// 만들어진 객체는 반드시 다시 delete를 해주어야 함
class Dog{
private:
int age;
public:
int getAge();
void setAge(int a);
};
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age=a;
}
int main()
{
Dog *dp;
dp=new Dog; //Dog *dp=new Dog (두줄을 한줄로도 가능)
if(!dp){
std::cout << "메모리 할당 불가!";
return 1;
}
dp -> setAge(5); //pointer
std::cout << "메모리에 할당된 값은?" << " " << dp->getAge() << " " << "입니다." << std::endl;
delete dp; //이렇게 해야 heap에서 사라진다
return 0;
}
print => 메모리에 할당된 값은? 5 입니다.
✭ 배열 객체 동적 할당 (new Dog[10]) set으로 설정하고 get으로 받기 ✭
class Dog{
private:
int age;
public:
int getAge();
void setAge(int a);
};
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age=a;
}
int main()
{
Dog *dp=new Dog[10]; // 객체배열 할당
if(!dp){
std::cout << "메모리할당이 되지 않았습니다.";
return 1;
}
for (int i=0; i<10; i++){
dp[i].setAge(i);}
for (int i=0; i<10; i++){
std::cout << i << " 번쨰 객체의 나이는" << dp[i].getAge() << "입니다." << std::endl;
}
delete []dp;
return 0;
}
-- print
0 번쨰 객체의 나이는0입니다.
1 번쨰 객체의 나이는1입니다.
2 번쨰 객체의 나이는2입니다.
3 번쨰 객체의 나이는3입니다.
4 번쨰 객체의 나이는4입니다.
5 번쨰 객체의 나이는5입니다.
6 번쨰 객체의 나이는6입니다.
7 번쨰 객체의 나이는7입니다.
8 번쨰 객체의 나이는8입니다.
9 번쨰 객체의 나이는9입니다.