C
에서는 malloc
과 free
를 이용해서 메모리를 할당하고 해제한다. 물론 C++
에서도 malloc
과 free
를 사용할 수 있다. int
, float
과 같은 크기가 정해진 자료형에서는…! 하지만 class
를 기반으로한 객체에 메모리를 할당한다면 문제가 생긴다. malloc
과 free
는 생성자와 소멸자를 호출하지 않기 때문이다.
이를 보완하기 위해 C++
에서는 new
와 delete
를 사용한다. new
와 delete
는 생성자와 소멸자를 호출한다.
C
와 다르게 malloc
에 size
와 자료형
을 명시할 필요없이 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;
}