๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[๊ฐ์ฒด ํฌ์ธํ„ฐ์™€ ๊ฐ์ฒด ๋ฐฐ์—ด, ๊ฐ์ฒด์˜ ๋™์  ์ƒ์„ฑ] ๊ฐ์ฒด ํฌ์ธํ„ฐ์™€ new delete ๋™์  ์ƒ์„ฑ ๋ฐ ํ• ๋‹น๊ณผ ๋ฐ˜ํ™˜ ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/C++

[๊ฐ์ฒด ํฌ์ธํ„ฐ์™€ ๊ฐ์ฒด ๋ฐฐ์—ด, ๊ฐ์ฒด์˜ ๋™์  ์ƒ์„ฑ] ๊ฐ์ฒด ํฌ์ธํ„ฐ์™€ new delete ๋™์  ์ƒ์„ฑ ๋ฐ ํ• ๋‹น๊ณผ ๋ฐ˜ํ™˜

์ง•์ง•์•ŒํŒŒ์นด 2024. 2. 21. 01:03
728x90
๋ฐ˜์‘ํ˜•

<ํ™ฉ๊ธฐํƒœ ๋‹˜์˜ ๋ช…ํ’ˆ C++ Programming ์„œ์ ์„ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

 

๐Ÿ ๊ฐ์ฒด ํฌ์ธํ„ฐ ์„ ์–ธ ๋ฐ ํ™œ์šฉ

โ˜‘๏ธ ๊ฐ์ฒด ํฌ์ธํ„ฐ
๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์ฝ๊ณ  ๊ฐ’์„ ์“ฐ๊ฑฐ๋‚˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค


โ˜‘๏ธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์„ ์–ธ
Circle *p;


โ˜‘๏ธํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๊ฐ์ฒด ์ฃผ์†Œ ์ง€์ •
๊ฐ์ฒด์˜ ์ฃผ์†Œ๋Š” ๊ฐ์ฒด ์ด๋ฆ„ ์•ž์— & ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•œ๋‹ค
p = &donut;


โ˜‘๏ธํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ๋ฉค๋ฒ„ ์ ‘๊ทผ
๊ฐ์ฒด ์ด๋ฆ„์œผ๋กœ ๋ฉค๋ฒ„๋ฅผ ์ ‘๊ทผํ•  ๋•Œ ์ (.) ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค
d = donut.getArea();
๊ฐ์ฒด ํฌ์ธํ„ฐ๋กœ ๋ฉค๋ฒ„๋ฅผ ์ ‘๊ทผํ•  ๋•Œ -> ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค
d = p -> getArea();
d = (*p).getArea();

// ๊ฐ์ฒด ํฌ์ธํ„ฐ ์„ ์–ธ ๋ฐ ํ™œ์šฉ
#include <iostream>
using namespace std;

class Circle
{
    int radius;

public:
    Circle() { radius = 1; }
    Circle(int r) { radius = r; }
    double getArea();
};

double Circle::getArea()
{
    return 3.14 * radius * radius;
}

int main()
{
    Circle donut;
    Circle pizza(30);

    // ๊ฐ์ฒด ์ด๋ฆ„์œผ๋กœ ๋ฉค๋ฒ„ ์ ‘๊ทผ
    cout << donut.getArea() << endl;

    // ๊ฐ์ฒด ํฌ์ธํ„ฐ๋กœ ๋ฉค๋ฒ„ ์ ‘๊ทผ
    Circle *p;
    p = &donut;

    cout << p->getArea() << endl;
    cout << (*p).getArea() << endl;

    p = &pizza;
    cout << p->getArea() << endl;
    cout << (*p).getArea() << endl;
}

/*
3.14
3.14
3.14
2826
2826

- ๊ฐ์ฒด ํฌ์ธํ„ฐ
๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์ฝ๊ณ  ๊ฐ’์„ ์“ฐ๊ฑฐ๋‚˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค
- ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์„ ์–ธ
Circle *p;
- ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๊ฐ์ฒด ์ฃผ์†Œ ์ง€์ •
๊ฐ์ฒด์˜ ์ฃผ์†Œ๋Š” ๊ฐ์ฒด ์ด๋ฆ„ ์•ž์— & ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•œ๋‹ค
p = &donut;
- ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ๋ฉค๋ฒ„ ์ ‘๊ทผ
๊ฐ์ฒด ์ด๋ฆ„์œผ๋กœ ๋ฉค๋ฒ„๋ฅผ ์ ‘๊ทผํ•  ๋•Œ ์ (.) ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค
d = donut.getArea();
๊ฐ์ฒด ํฌ์ธํ„ฐ๋กœ ๋ฉค๋ฒ„๋ฅผ ์ ‘๊ทผํ•  ๋•Œ -> ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค
d = p -> getArea();
d = (*p).getArea();
*/

 

 

๐Ÿ ๊ฐ์ฒด ๋ฐฐ์—ด
๊ฐ์ฒด ๋ฐฐ์—ด์€ ์›์†Œ๊ฐ€ ๊ฐ์ฒด
int, char ๋“ฑ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

// Circle ํด๋ž˜์Šค์˜ ๋ฐฐ์—ด ์„ ์–ธ ๋ฐ ํ™œ์šฉ
#include <iostream>
using namespace std;

class Circle
{
    int radius;

public:
    Circle() { radius = 1; }
    Circle(int r) { radius = r; }
    void setRadius(int r) { radius = r; }
    double getArea();
};

double Circle::getArea()
{
    return 3.14 * radius * radius;
}

int main()
{
    // Circle ๊ฐ์ฒด ๋ฐฐ์—ด ์ƒ์„ฑ
    Circle circleArray[3];

    // ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ ์ ‘๊ทผ
    circleArray[0].setRadius(10);
    circleArray[1].setRadius(20);
    circleArray[2].setRadius(30);

    // ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ ์ ‘๊ทผ
    for (int i = 0; i < 3; i++)
    {
        cout << "Circle " << i << "์˜ ๋ฉด์ ์€ " << circleArray[i].getArea() << endl;
    }

    Circle *p;
    p = circleArray;
    // ๊ฐ์ฒด ํฌ์ธํ„ฐ๋กœ ๋ฐฐ์—ด ์ ‘๊ทผ
    for (int i = 0; i < 3; i++)
    {
        cout << "Circle " << i << "์˜ ๋ฉด์ ์€ " << p->getArea() << endl;
        // ๋ฐฐ์—ด์˜ ๋‹ค์Œ ์›์†Œ
        p++;
    }
}

/*
Circle 0์˜ ๋ฉด์ ์€ 314
Circle 1์˜ ๋ฉด์ ์€ 1256
Circle 2์˜ ๋ฉด์ ์€ 2826
Circle 0์˜ ๋ฉด์ ์€ 314
Circle 1์˜ ๋ฉด์ ์€ 1256
Circle 2์˜ ๋ฉด์ ์€ 2826

- ๊ฐ์ฒด ๋ฐฐ์—ด
๊ฐ์ฒด ๋ฐฐ์—ด์€ ์›์†Œ๊ฐ€ ๊ฐ์ฒด
int, char ๋“ฑ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
*/

 

๐Ÿ ๊ฐ์ฒด ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”

โ˜‘๏ธ ๊ฐ์ฒด ๋ฐฐ์—ด ์„ ์–ธ
๊ฐ์ฒด ๋ฐฐ์—ด ์„ ์–ธ๋ฌธ์€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค
์˜ค์ง ๋งค๊ฐœ ๋ณ€์ˆ˜ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœํ•œ๋‹ค

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฝ์ž…ํ•˜๋ฏ€๋กœ, ๊ฐ์ฒด ๋ฐฐ์—ด ์ƒ์„ฑ ์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค
๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์ง„ ์ƒ์„ฑ์ž๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์€ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, ๊ฐ์ฒด ๋ฐฐ์—ด ์„ ์–ธํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค

 

โ˜‘๏ธ ๊ฐ์ฒด ๋ฐฐ์—ด ์‚ฌ์šฉ
๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ ๊ฐ์ฒด๋Š” [] ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค
์›์†Œ ๊ฐ์ฒด์™€ ๋ฉค๋ฒ„ ์‚ฌ์ด์— ์ (.) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
ํด๋ž˜์Šค์˜ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค

โ˜‘๏ธ ๋ฐฐ์—ด ์†Œ๋ฉธ๊ณผ ์†Œ๋ฉธ์ž
ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ์ˆ˜ ๋‚ด์— ์„ ์–ธ๋œ ๋ฐฐ์—ด๋„ ์†Œ๋ฉธ๋œ๋‹ค
๋ฐฐ์—ด์ด ์†Œ๋ฉธ๋˜๋ฉด ๋ชจ๋“  ์›์†Œ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๋ฉฐ ๊ฐ ์›์†Œ ๊ฐ์ฒด๋งˆ๋‹ค ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค
๋†’์€ ์ธ๋ฑ์Šค์—์„œ๋ถ€ํ„ฐ ์›์†Œ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๊ณ , ๊ฐ ๊ฐ์ฒด๋งˆ๋‹ค ~() ์†Œ๋ฉธ์ž๊ฐ€ ์‹คํ–‰๋œ๋‹ค

โ˜‘๏ธ ๊ฐ์ฒด ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›์†Œ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค
๋ฐฐ์—ด์„ ์„ ์–ธํ•  ๋•Œ {} ์•ˆ์— ํ˜ธ์ถœํ•  ์ƒ์„ฑ์ž๋ฅผ ์ง€์ •ํ•œ๋‹ค

// ๊ฐ์ฒด ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
#include <iostream>
using namespace std;

class Circle
{
    int radius;

public:
    Circle() { radius = 1; }
    Circle(int r) { radius = r; }
    void setRadius(int r) { radius = r; }
    double getArea();
};

double Circle::getArea()
{
    return 3.14 * radius * radius;
}

int main()
{
    Circle circleArray[3] = {Circle(10), Circle(20), Circle()};

    for (int i = 0; i < 3; i++)
    {
        cout << "Circle " << i << "์˜ ๋ฉด์ ์€ " << circleArray[i].getArea() << endl;
    }
}

/*
Circle 0์˜ ๋ฉด์ ์€ 314
Circle 1์˜ ๋ฉด์ ์€ 1256
Circle 2์˜ ๋ฉด์ ์€ 3.14

- ๊ฐ์ฒด ๋ฐฐ์—ด ์„ ์–ธ
๊ฐ์ฒด ๋ฐฐ์—ด ์„ ์–ธ๋ฌธ์€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค
์˜ค์ง ๋งค๊ฐœ ๋ณ€์ˆ˜ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœํ•œ๋‹ค

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฝ์ž…ํ•˜๋ฏ€๋กœ, ๊ฐ์ฒด ๋ฐฐ์—ด ์ƒ์„ฑ ์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค
๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์ง„ ์ƒ์„ฑ์ž๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์€ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, ๊ฐ์ฒด ๋ฐฐ์—ด ์„ ์–ธํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค

- ๊ฐ์ฒด ๋ฐฐ์—ด ์‚ฌ์šฉ
๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ ๊ฐ์ฒด๋Š” [] ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค
์›์†Œ ๊ฐ์ฒด์™€ ๋ฉค๋ฒ„ ์‚ฌ์ด์— ์ (.) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
ํด๋ž˜์Šค์˜ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค

- ๋ฐฐ์—ด ์†Œ๋ฉธ๊ณผ ์†Œ๋ฉธ์ž
ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ์ˆ˜ ๋‚ด์— ์„ ์–ธ๋œ ๋ฐฐ์—ด๋„ ์†Œ๋ฉธ๋œ๋‹ค
๋ฐฐ์—ด์ด ์†Œ๋ฉธ๋˜๋ฉด ๋ชจ๋“  ์›์†Œ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๋ฉฐ ๊ฐ ์›์†Œ ๊ฐ์ฒด๋งˆ๋‹ค ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค
๋†’์€ ์ธ๋ฑ์Šค์—์„œ๋ถ€ํ„ฐ ์›์†Œ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๊ณ , ๊ฐ ๊ฐ์ฒด๋งˆ๋‹ค ~() ์†Œ๋ฉธ์ž๊ฐ€ ์‹คํ–‰๋œ๋‹ค

- ๊ฐ์ฒด ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›์†Œ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค
๋ฐฐ์—ด์„ ์„ ์–ธํ•  ๋•Œ {} ์•ˆ์— ํ˜ธ์ถœํ•  ์ƒ์„ฑ์ž๋ฅผ ์ง€์ •ํ•œ๋‹ค
*/

 

๐Ÿ ๋‹ค์ฐจ์› ๊ฐ์ฒด ๋ฐฐ์—ด
๋‹ค์ฐจ์› ๊ฐ์ฒด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค
{} ์•ˆ์— ์ƒ์„ฑ์ž๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค

// Circle ํด๋ž˜์Šค์˜ 2์ฐจ์› ๋ฐฐ์—ด ์„ ์–ธ ๋ฐ ํ™œ์šฉ
#include <iostream>
using namespace std;

class Circle
{
    int radius;

public:
    Circle() { radius = 1; }
    Circle(int r) { radius = r; }
    void setRadius(int r) { radius = r; }
    double getArea();
};

double Circle::getArea()
{
    return 3.14 * radius * radius;
}

int main()
{
    Circle circles[2][3];

    circles[0][0].setRadius(1);
    circles[0][1].setRadius(2);
    circles[0][2].setRadius(3);
    circles[1][0].setRadius(4);
    circles[1][1].setRadius(5);
    circles[1][2].setRadius(6);

    // ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„ ์ ‘๊ทผ
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << "Circle [" << i << ", " << j << "] ์˜ ๋ฉด์ ์€ ";
            cout << circles[i][j].getArea() << endl;
        }
    }
}

/*
Circle [0, 0] ์˜ ๋ฉด์ ์€ 3.14
Circle [0, 1] ์˜ ๋ฉด์ ์€ 12.56
Circle [0, 2] ์˜ ๋ฉด์ ์€ 28.26
Circle [1, 0] ์˜ ๋ฉด์ ์€ 50.24
Circle [1, 1] ์˜ ๋ฉด์ ์€ 78.5
Circle [1, 2] ์˜ ๋ฉด์ ์€ 113.04

- ๋‹ค์ฐจ์› ๊ฐ์ฒด ๋ฐฐ์—ด
๋‹ค์ฐจ์› ๊ฐ์ฒด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค
{} ์•ˆ์— ์ƒ์„ฑ์ž๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค
*/

 

๐Ÿ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜

C์–ธ์–ด ์—์„œ๋Š” ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜์„ ์œ„ํ•ด malloc() / free() ํ‘œ์ค€ C ํ•จ์ˆ˜ ์ด์šฉ
C++ ์—์„œ๋Š” ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜์„ ์œ„ํ•ด new ์™€ delete ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค
new ์—ฐ์‚ฐ์ž๋Š” ํž™ ๊ณต๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น,
delete ์—ฐ์‚ฐ์ž๋Š” ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํž™์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค

๋ฐ์ดํ„ฐ ํƒ€์ž… * ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ๋ฐ์ดํ„ฐํƒ€์ž…;
delete ํฌ์ธํ„ฐ๋ณ€์ˆ˜;


new ์—ฐ์‚ฐ์ž๋Š” '๋ฐ์ดํ„ฐํƒ€์ž…'์˜ ํฌ๊ธฐ๋งŒํผ ํž™์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค
'ํฌ์ธํ„ฐ๋ณ€์ˆ˜'๋Š” ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค

delete ์—ฐ์‚ฐ์ž๋Š” 'ํฌ์ธํ„ฐ๋ณ€์ˆ˜'๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํž™์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค
'๋ฐ์ดํ„ฐํƒ€์ž…'์€ int, double, char ๋“ฑ ๊ธฐ๋ณธ ํƒ€์ž… ๋ฟ ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค๋„ ํฌํ•จํ•œ๋‹ค

ํž™ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด new ๋Š” NULL ์„ ๋ฆฌํ„ดํ•˜๋ฏ€๋กœ, NULL ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

 

โ˜‘๏ธ ๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ธฐํ™”
new ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์„ ๋•Œ, ์ดˆ๊นƒ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค
๋ฐ์ดํ„ฐํƒ€์ž… *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ๋ฐ์ดํ„ฐํƒ€์ž…(์ดˆ๊นƒ๊ฐ’);

โ˜‘๏ธ delete ์‚ฌ์šฉ ์‹œ ์ฃผ์˜
delete ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์ ์ ˆํ•˜์ง€ ๋ชปํ•œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์‹คํ–‰ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

// ์ •์ˆ˜ํ˜• ๊ณต๊ฐ„์˜ ๋™์  ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜
#include <iostream>
using namespace std;

int main()
{
    int *p;

    p = new int;

    // p๊ฐ€ NULL ์ด๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹คํŒจ
    if (!p)
    {
        cout << "๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.";
        return 0;
    }

    *p = 5;
    int n = *p;
    cout << "*p = " << *p << endl;
    cout << "n = " << n << endl;

    // ํ• ๋‹น ๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜
    delete p;
}

/*
*p = 5
n = 5

- ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜
C์–ธ์–ด ์—์„œ๋Š” ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜์„ ์œ„ํ•ด malloc() / free() ํ‘œ์ค€ C ํ•จ์ˆ˜ ์ด์šฉ
C++ ์—์„œ๋Š” ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜์„ ์œ„ํ•ด new ์™€ delete ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ๋‹ค
new ์—ฐ์‚ฐ์ž๋Š” ํž™ ๊ณต๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น,
delete ์—ฐ์‚ฐ์ž๋Š” ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํž™์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค

๋ฐ์ดํ„ฐ ํƒ€์ž… * ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ๋ฐ์ดํ„ฐํƒ€์ž…;
delete ํฌ์ธํ„ฐ๋ณ€์ˆ˜;

new ์—ฐ์‚ฐ์ž๋Š” '๋ฐ์ดํ„ฐํƒ€์ž…'์˜ ํฌ๊ธฐ๋งŒํผ ํž™์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค
'ํฌ์ธํ„ฐ๋ณ€์ˆ˜'๋Š” ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค

delete ์—ฐ์‚ฐ์ž๋Š” 'ํฌ์ธํ„ฐ๋ณ€์ˆ˜'๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํž™์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค
'๋ฐ์ดํ„ฐํƒ€์ž…'์€ int, double, char ๋“ฑ ๊ธฐ๋ณธ ํƒ€์ž… ๋ฟ ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค๋„ ํฌํ•จํ•œ๋‹ค

ํž™ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด new ๋Š” NULL ์„ ๋ฆฌํ„ดํ•˜๋ฏ€๋กœ, NULL ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

- ๋™์  ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ธฐํ™”
new ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์„ ๋•Œ, ์ดˆ๊นƒ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค
๋ฐ์ดํ„ฐํƒ€์ž… *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ๋ฐ์ดํ„ฐํƒ€์ž…(์ดˆ๊นƒ๊ฐ’);

- delete ์‚ฌ์šฉ ์‹œ ์ฃผ์˜
delete ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์ ์ ˆํ•˜์ง€ ๋ชปํ•œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์‹คํ–‰ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค
*/

 

๐Ÿ ๋ฐฐ์—ด์˜ ๋™์  ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜

new ์™€ delete ์—ฐ์‚ฐ์ž๋กœ ๋ฐฐ์—ด์„ ํ• ๋‹น๋ฐ›๊ณ  ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค

โ˜‘๏ธ ๋ฐฐ์—ด์˜ ๋™์  ํ• ๋‹น/๋ฐ˜ํ™˜์˜ ๊ธฐ๋ณธ ํ˜•์‹

// ๋ฐฐ์—ด์˜ ๋™์  ํ• ๋‹น
๋ฐ์ดํ„ฐํƒ€์ž… *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ๋ฐ์ดํ„ฐํƒ€์ž… [๋ฐฐ์—ด์˜ ํฌ๊ธฐ]

// ๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜
delte [] ํฌ์ธํ„ฐ๋ณ€์ˆ˜;


new ์—ฐ์‚ฐ์ž๋Š” '๋ฐฐ์—ด์˜ ํฌ๊ธฐ' ๋งŒํ•œ ๋ฐฐ์—ด์„ ํ• ๋‹น๋ฐ›์•„ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉฐ,
delete ๋Š” 'ํฌ์ธํ„ฐ๋ณ€์ˆ˜' ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

new ๋ฅผ ์ด์šฉํ•˜๋ฉด int, char ๋“ฑ์˜ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํƒ€์ž…์˜ ๋ฐฐ์—ด์„ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค

 

โ˜‘๏ธ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ์ฃผ์˜์‚ฌํ•ญ
new ๋กœ ๋ฐฐ์—ด์„ ๋™์  ํ• ๋‹น๋ฐ›์„ ๋•Œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ง์ ‘ '์ดˆ๊นƒ๊ฐ’'์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค

// ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” ๋ถˆ๊ฐ€
int *pArray = new int [10][20];

// ์ดˆ๊ธฐํ™”๋œ ์ •์ˆ˜ ๋ฐฐ์—ด ์„ ์–ธ
int *pArray = new int [] {1, 2, 3, 4,};


โ˜‘๏ธ ๋ฐฐ์—ด์„ delete ํ•  ๋•Œ ์ฃผ์˜ ์‚ฌํ•ญ

// new int[10] ์ผ ๊ฒฝ์šฐ
delete [] p;

// new int; ์ผ ๊ฒฝ์šฐ
delete p;
// ์ •์ˆ˜ํ˜• ๋ฐฐ์—ด์˜ ๋™์  ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜
#include <iostream>
using namespace std;

int main()
{
    cout << "์ž…๋ ฅํ•  ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š”?";
    int n;
    cin >> n;

    if (n <= 0)
        return 0;
    // n ๊ฐœ์˜ ์ •์ˆ˜ ๋ฐฐ์—ด ๋ฐ ๋™์  ํ• ๋‹น
    int *p = new int[n];
    if (!p)
    {
        cout << "๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.";
        return 0;
    }

    for (int i = 0; i < n; i++)
    {
        cout << i + 1 << "๋ฒˆ์งธ ์ •์ˆ˜ : ";
        cin >> p[i];
    }

    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        sum += p[i];
    }

    cout << "ํ‰๊ท  = " << sum / n << endl;

    // ๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜
    delete[] p;
}

/*
์ž…๋ ฅํ•  ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š”?4
1๋ฒˆ์งธ ์ •์ˆ˜ : 3
2๋ฒˆ์งธ ์ •์ˆ˜ : 5
3๋ฒˆ์งธ ์ •์ˆ˜ : -23
4๋ฒˆ์งธ ์ •์ˆ˜ : 5
ํ‰๊ท  = -2

- ๋ฐฐ์—ด์˜ ๋™์  ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜
new ์™€ delete ์—ฐ์‚ฐ์ž๋กœ ๋ฐฐ์—ด์„ ํ• ๋‹น๋ฐ›๊ณ  ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค

- ๋ฐฐ์—ด์˜ ๋™์  ํ• ๋‹น/๋ฐ˜ํ™˜์˜ ๊ธฐ๋ณธ ํ˜•์‹
// ๋ฐฐ์—ด์˜ ๋™์  ํ• ๋‹น
๋ฐ์ดํ„ฐํƒ€์ž… *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ๋ฐ์ดํ„ฐํƒ€์ž… [๋ฐฐ์—ด์˜ ํฌ๊ธฐ]
// ๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜
delte [] ํฌ์ธํ„ฐ๋ณ€์ˆ˜;

new ์—ฐ์‚ฐ์ž๋Š” '๋ฐฐ์—ด์˜ ํฌ๊ธฐ' ๋งŒํ•œ ๋ฐฐ์—ด์„ ํ• ๋‹น๋ฐ›์•„ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉฐ,
delete ๋Š” 'ํฌ์ธํ„ฐ๋ณ€์ˆ˜' ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

new ๋ฅผ ์ด์šฉํ•˜๋ฉด int, char ๋“ฑ์˜ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํƒ€์ž…์˜ ๋ฐฐ์—ด์„ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค

- ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ์ฃผ์˜์‚ฌํ•ญ
new ๋กœ ๋ฐฐ์—ด์„ ๋™์  ํ• ๋‹น๋ฐ›์„ ๋•Œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ง์ ‘ '์ดˆ๊นƒ๊ฐ’'์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค
// ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” ๋ถˆ๊ฐ€
int *pArray = new int [10][20];

// ์ดˆ๊ธฐํ™”๋œ ์ •์ˆ˜ ๋ฐฐ์—ด ์„ ์–ธ
int *pArray = new int [] {1, 2, 3, 4,};

- ๋ฐฐ์—ด์„ delete ํ•  ๋•Œ ์ฃผ์˜ ์‚ฌํ•ญ
// new int[10] ์ผ ๊ฒฝ์šฐ
delete [] p;

// new int; ์ผ ๊ฒฝ์šฐ
delete p;
*/

 

๐Ÿ ๊ฐ์ฒด์™€ ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ๋™์  ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜
โ˜‘๏ธ new ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด์˜ ๋™์  ์ƒ์„ฑ๊ณผ ์ƒ์„ฑ์ž

ํด๋ž˜์Šค *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ํด๋ž˜์Šค์ด๋ฆ„; // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ
ํด๋ž˜์Šค *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ํด๋ž˜์Šค์ด๋ฆ„(์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๋ฆฌ์ŠคํŠธ);

new ๋Š” ํด๋ž˜์Šค ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋ฐ›์•„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค

โ˜‘๏ธdelete ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ๋ฐ˜ํ™˜๊ณผ ์†Œ๋ฉธ์ž
๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ 'ํฌ์ธํ„ฐ๋ณ€์ˆ˜'๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค

delete ํฌ์ธํ„ฐ๋ณ€์ˆ˜;


delete ์‚ฌ์šฉ ์‹œ 'ํฌ์ธํ„ฐ๋ณ€์ˆ˜'๋Š” ๋ฐ˜๋“œ์‹œ new๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์  ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ์—ฌ์•ผ ํ•œ๋‹ค
delete ๋ฅผ ์‹คํ–‰๋˜๋ฉด, ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ง์ „์— ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ž๊ฐ€ ์‹คํ–‰๋œ๋‹ค

// Circle ๊ฐ์ฒด์˜ ๋™์  ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜
#include <iostream>
using namespace std;

class Circle
{
    int radius;

public:
    Circle();
    Circle(int r);
    ~Circle();
    void setRadius(int r) { radius = r; }
    double getArea() { return 3.14 * radius * radius; }
};

Circle::Circle()
{
    radius = 1;
    cout << "์ƒ์„ฑ์ž ์‹คํ–‰ radius = " << radius << endl;
}

Circle::Circle(int r)
{
    radius = r;
    cout << "์ƒ์„ฑ์ž ์‹คํ–‰ radius = " << radius << endl;
}

Circle::~Circle()
{
    cout << "์†Œ๋ฉธ์ž ์‹คํ–‰ radius = " << radius << endl;
}

int main()
{
    Circle *p, *q;
    p = new Circle();
    q = new Circle(30);

    cout << p->getArea() << endl
         << q->getArea() << endl;

    // ์ƒ์„ฑํ•œ ์ˆœ์„œ์— ๊ด€๊ณ„ ์—†์ด ์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ delete ๊ฐ€๋Šฅ
    delete p;
    delete q;
}

/*
์ƒ์„ฑ์ž ์‹คํ–‰ radius = 1
์ƒ์„ฑ์ž ์‹คํ–‰ radius = 30
3.14
2826
์†Œ๋ฉธ์ž ์‹คํ–‰ radius = 1
์†Œ๋ฉธ์ž ์‹คํ–‰ radius = 30

- ๊ฐ์ฒด์™€ ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ๋™์  ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜
- new ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด์˜ ๋™์  ์ƒ์„ฑ๊ณผ ์ƒ์„ฑ์ž
ํด๋ž˜์Šค *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ํด๋ž˜์Šค์ด๋ฆ„; // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ
ํด๋ž˜์Šค *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ํด๋ž˜์Šค์ด๋ฆ„(์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๋ฆฌ์ŠคํŠธ);

new ๋Š” ํด๋ž˜์Šค ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋ฐ›์•„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค

- delete ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ๋ฐ˜ํ™˜๊ณผ ์†Œ๋ฉธ์ž
๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ 'ํฌ์ธํ„ฐ๋ณ€์ˆ˜'๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค
delete ํฌ์ธํ„ฐ๋ณ€์ˆ˜;

delete ์‚ฌ์šฉ ์‹œ 'ํฌ์ธํ„ฐ๋ณ€์ˆ˜'๋Š” ๋ฐ˜๋“œ์‹œ new๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์  ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ์—ฌ์•ผ ํ•œ๋‹ค
delete ๋ฅผ ์‹คํ–‰๋˜๋ฉด, ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ง์ „์— ๊ฐ์ฒด์˜ ์†œ๋ ค์ž๊ฐ€ ์‹คํ–‰๋œ๋‹ค
*/

 

๐Ÿ ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ๋™์  ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜
โ˜‘๏ธ ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ๋™์  ์ƒ์„ฑ๊ณผ ์ƒ์„ฑ์ž

ํด๋ž˜์Šค์ด๋ฆ„ *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ํด๋ž˜์Šค์ด๋ฆ„ [๋ฐฐ์—ด ํฌ๊ธฐ];


new ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ๋•Œ, ๋งค๊ฐœ ๋ณ€์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜๋Š” ์—†๋‹ค
๋ฐฐ์—ด์„ ๊ฐ ์›์†Œ ๊ฐ์ฒด๋กœ๋Š” ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค

โ˜‘๏ธ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ์‚ฌ์šฉ
๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ๋ฐฐ์—ด์€ ๊ฐ์ฒด ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค

โ˜‘๏ธ๋ฐฐ์—ด์˜ ๋ฐ˜ํ™˜๊ณผ ์†Œ๋ฉธ์ž
delete ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•์‹

delete [] ํฌ์ธํ„ฐ๋ณ€์ˆ˜;


delete๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ง์ „, ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ž๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค
์†Œ๋ฉธ์ž์˜ ์‹คํ–‰ ์ˆœ์„œ๋Š” ์ƒ์„ฑ์˜ ๋ฐ˜๋Œ€ ์ˆœ์„œ์ด๋‹ค

 

โ˜‘๏ธ ๋™์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
ํž™ heap ์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์— new ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ
๋Œ€๋ถ€๋ถ„ ์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ํž™์ด ๋”ฐ๋กœ ์ฃผ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ ์œผ๋กœ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š” ๊ฒƒ์ด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ ํž™์— ์˜ํ–ฅ ์ฃผ์ง€ ์•Š๋Š”๋‹ค
๋‹ค๋งŒ, ํ•„์š”์—†๊ฒŒ ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„๊ตฌ์‚ฌ ์ƒ๊ธฐ๋ฉด, ํž™์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ํ• ๋‹น ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค

ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ, ํž™ ์ „์ฒด๊ฐ€ ์šด์˜์ฒด์ œ์— ์˜ํ•ด ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ ๋ˆ„์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ๊ฑฑ์ •์€ ์•ˆํ•ด๋„ ๋œ๋‹ค

โ˜‘๏ธ ๋™์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜
๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ์žƒ์–ด๋ฒ„๋ ค ํž™์— ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค
ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ˆ„์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ชจ๋‘ ์‹œ์Šคํ…œ ํž™์œผ๋กœ ์ž๋™ ๋ฐ˜ํ™˜๋œ๋‹ค

// Circle ๋ฐฐ์—ด์˜ ๋™์  ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜
#include <iostream>
using namespace std;

class Circle
{
    int radius;

public:
    Circle();
    Circle(int r);
    ~Circle();
    void setRadius(int r) { radius = r; }
    double getArea() { return 3.14 * radius * radius; }
};

Circle::Circle()
{
    radius = 1;
    cout << "์ƒ์„ฑ์ž ์‹คํ–‰ radius = " << radius << endl;
}

Circle::Circle(int r)
{
    radius = r;
    cout << "์ƒ์„ฑ์ž ์‹คํ–‰ radius = " << radius << endl;
}

Circle::~Circle()
{
    cout << "์†Œ๋ฉธ์ž ์‹คํ–‰ radius = " << radius << endl;
}

int main()
{
    // ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ๋™์  ์ƒ์„ฑ
    Circle *pArray = new Circle[3];

    pArray[0].setRadius(10);
    pArray[1].setRadius(20);
    pArray[2].setRadius(30);

    for (int i = 0; i < 3; i++)
    {
        cout << pArray[i].getArea() << endl;
    }

    // ํฌ์ธํ„ฐ p์— ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๊ฐ’ ์„ค์ •
    Circle *p = pArray;
    for (int i = 0; i < 3; i++)
    {
        cout << p->getArea() << endl;
        // ๋‹ค์Œ ์›์†Œ์˜ ์ฃผ์†Œ ์ฆ๊ฐ€
        p++;
    }

    // ๊ฐ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ž ~Circle() ์‹คํ–‰
    // ๊ฐ์ฒด ๋ฐฐ์—ด ๋ฐ˜ํ™˜
    delete[] pArray;
}

/*
์ƒ์„ฑ์ž ์‹คํ–‰ radius = 1
์ƒ์„ฑ์ž ์‹คํ–‰ radius = 1
์ƒ์„ฑ์ž ์‹คํ–‰ radius = 1
314
1256
2826
314
1256
2826
์†Œ๋ฉธ์ž ์‹คํ–‰ radius = 30
์†Œ๋ฉธ์ž ์‹คํ–‰ radius = 20
์†Œ๋ฉธ์ž ์‹คํ–‰ radius = 10

- ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ๋™์  ์ƒ์„ฑ ๋ฐ ๋ฐ˜ํ™˜
๊ฐ์ฒด ๋ฐฐ์—ด์˜ ๋™์  ์ƒ์„ฑ๊ณผ ์ƒ์„ฑ์ž
ํด๋ž˜์Šค์ด๋ฆ„ *ํฌ์ธํ„ฐ๋ณ€์ˆ˜ = new ํด๋ž˜์Šค์ด๋ฆ„ [๋ฐฐ์—ด ํฌ๊ธฐ];

new ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ๋•Œ, ๋งค๊ฐœ ๋ณ€์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜๋Š” ์—†๋‹ค
๋ฐฐ์—ด์„ ๊ฐ ์›์†Œ ๊ฐ์ฒด๋กœ๋Š” ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค

- ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ์‚ฌ์šฉ
๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ๋ฐฐ์—ด์€ ๊ฐ์ฒด ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค

- ๋ฐฐ์—ด์˜ ๋ฐ˜ํ™˜๊ณผ ์†Œ๋ฉธ์ž
delete ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•์‹
delete [] ํฌ์ธํ„ฐ๋ณ€์ˆ˜;

delete๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ง์ „, ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ž๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค
์†Œ๋ฉธ์ž์˜ ์‹คํ–‰ ์ˆœ์„œ๋Š” ์ƒ์„ฑ์˜ ๋ฐ˜๋Œ€ ์ˆœ์„œ์ด๋‹ค
*/

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments