1 minute read

C++ 정리 9 (동적 메모리)

지난 시간에 이어서 객체의 동적 생성에 대해서 알아보도록 하겠습니다.

​ Circle *p = new Circle;

​ Circle *p = new Circle(30);

​ delete p;

위와 같이 작성하면 객체도 동적 생성 및 반환을 할 수 있습니다.

이때 동적 생성과 반환을 할때도 물론 생성자와 소멸자가 실행됩니다.

전에 정리에 중요한 내용을 생략하였습니다. 힙에서 메모리를 할당 받았으면 반드시 delete를 사용해서 반환을 해주어야 합니다. 그렇게 하지 않으면 메모리 누수라는 큰 에러가 발생하게 됩니다. 이 에러는 나중에 복잡한 코딩을 할 때 많이 발생하게 되므로 특히 주의 해야하는 내용입니다.

this 포인터

이번에는 this 포인터를 정리하도록 하겠습니다.

클래스를 사용하려면 this 포인터를 필수적으로 사용하여야 합니다.

this 포인터의 의미는 자기 자신을 가리키는 포인터 입니다.

사실 우리가 작성해왔던 클래스 문법에도 this포인터가 숨겨져 있었습니다.

​ class Circle {

​ int radius;

​ public:

​ Circle( ) { this -> radius = 1; }

​ Circle(int radius) { this->radius = radius ; }

​ void setRadius(int radius) { this->radius = radius }

​ }

위에 적은 것 처럼 사실 자신을 카르키는 포인터인 this가 계속 숨겨져서 사용되고 있었다.

이렇게 this 포인터는 숨겨질 수 있지만 반드시 작성해야 하는 경우가 있습니다.

위의 작성한 코드같이 멤버변수의 이름과 멤버 함수의 매개 변수의 이름이 같다면 반드시 this 를 사용해줌으로써 구별을 해주어야 합니다.

주의

this를 사용하면서 중요한 주의할 점이 있습니다.

  1. this는 클래스의 멤버함수에서만 사용할 수 있고 멤버가 아닌 다른 함수에서는 사용할 수 없습니다.
  2. static 멤버 함수에서는 this를 사용할 수 없습니다. 왜냐하면 static 멤버 함수는 객체가 생성되기 이전에 호출 될 수 있어서 멤버함수가 호출 되었을 때 객체가 존재하지 않을 수 있기 때문입니다.

string 클래스

이어서 스트링 클래스 사용방법에 대해서 알아보겠습니다.

string클래스는 우리가 편리하게 사용할 수 있는 문자열 입니다.

다음과 같이 사용할 수 있습니다.

​ #include

​ using namespace std;

​ string str = “I like “;

이렇게 스트링 클래스를 이용하여서 문자열을 사용할 수 있습니다.

string 클래스는 여러가지 멤버 함수를 사용할 수 있습니다. 이 내용들은 책을 찾아보거나 구글링을 통해서 자세히 찾아보실 수 있습니다.

오늘은 여기까지 정리를 마치며 동적 생성에 대한 정리를 마무리하도록 하겠습니다.

다음 시간에는 정말 중요한 내용인 참조에 대해서 정리하도록 하겠습니다.

Updated: