NEW 와 DELETE __ 메모리 할당 및 해제

😎·2022년 12월 13일
0

CPP

목록 보기
14/46
post-thumbnail

NEW & DELETE

C 에서는 mallocfree 를 이용해서 메모리를 할당하고 해제한다. 물론 C++ 에서도 mallocfree 를 사용할 수 있다. int, float 과 같은 크기가 정해진 자료형에서는…! 하지만 class를 기반으로한 객체에 메모리를 할당한다면 문제가 생긴다. mallocfree 는 생성자와 소멸자를 호출하지 않기 때문이다.

이를 보완하기 위해 C++ 에서는 newdelete 를 사용한다. newdelete 는 생성자와 소멸자를 호출한다.


코드

기본적인 new 와 delete 방식

C 와 다르게 mallocsize자료형을 명시할 필요없이 new 만 적으면 된다.

#include <iostream>
#include <string>

class Student
{
    private:
        std::string const _login;
    
    public:
        Student(std::string const login) : _login(login)
        {
            std::cout << "Student " << this->_login << " is born" << std::endl;
        }

        ~Student(void)
        {
            std::cout << "student " << this->_login << " died" << std::endl;
        }
};

int main(void)
{
    Student     bob = Student("bfubar"); //stack 에 할당
    Student     *jim = new Student("jfubar"); //heap 에 동적할당

    //Do some stuff here

    delete jim; //jim is destroyed
    return (0); //bob is destroyed
}

배열 할당 및 해제 방식

할당은 똑같이 new 를 적고 뒤에 사이즈를 넣는다. new Student[사이즈].
해제할 때가 조금 어색하다. delete [] 할당객체. []delete 와 객체 사이에 넣어준다.

#include <iostream>
#include <string>

class Student
{
    private:
        std::string const _login;
    
    public:
        Student() : _login("1default")
        {
            std::cout << "Student " << this->_login << " is born" << std::endl;
        }

        ~Student(void)
        {
            std::cout << "student " << this->_login << " died" << std::endl;
        }
};

int main(void)
{
    Student     *students = new Student[3];

    //Do some stuff here

    delete [] students;
}

profile
jaekim

0개의 댓글