C++의 벡터 소멸자
이 문서에서는 C++에서 벡터와 문자열을 만들 때 소멸자와 소멸자를 사용하는 방법에 대해 설명합니다.
C++의 소멸자
OOP 패러다임에서 소멸자는 클래스의 객체가 삭제되거나 수명이 끝날 때마다 자동으로 실행되는 각 클래스와 관련된 멤버 함수입니다. 또한 힙 메모리에 생성된 모든 변수에 대해 소멸자가 호출됩니다.
이러한 변수가 삭제되면 나중에 사용할 수 있도록 메모리가 해제되도록 소멸자가 호출됩니다.
소멸자는 타일 기호 접두사(~
)가 있는 클래스 이름과 동일한 이름으로 생성됩니다. 클래스에서 생성자를 사용하여 생성된 모든 객체는 소멸자를 사용하여 삭제되지만 생성 순서의 역순으로 삭제됩니다.
소멸자의 구문은 다음과 같습니다.
~<className>() {
// coding
}
예시 클래스를 살펴보겠습니다.
#include <iostream>
using namespace std;
class DestructorExample {
public:
DestructorExample() { cout << "In Constructor of DestructorExample" << endl; }
~DestructorExample() { cout << "In Destructor of DestructorExample"; }
};
int main() {
DestructorExample t;
return 0;
}
그러면 다음과 같은 결과가 나타납니다.
In Constructor of DestructorExample
In Destructor of DestructorExample
C++에서 벡터와 문자열의 소멸자
std::vector
및 std::string
을 사용하는 경우 개체가 범위를 벗어나면 소멸자가 자동으로 호출됩니다. 이러한 클래스에는 해당 객체를 삭제해야 할 때 자동으로 트리거되는 소멸자가 구현되어 있습니다.
따라서 이를 호출하거나 명시적으로 구현할 필요가 없습니다.
그러나 일부 클래스에 대한 포인터 벡터가 있는 경우 이러한 객체를 다음과 같이 명시적으로 삭제해야 합니다.
#include <iostream>
#include <vector>
using namespace std;
class MyClass {
public:
MyClass() { cout << "Object Created" << endl; }
~MyClass() { cout << "Object Destroyed" << endl; }
};
int main() {
vector<MyClass*> testVec;
// Creating the objects
MyClass* p = NULL;
for (int i = 0; i < 3; i++) {
p = new MyClass();
testVec.push_back(p);
}
// Destroying the objects
for (auto p : testVec) {
delete p;
}
testVec.clear();
return 0;
}
출력:
Object Created
Object Created
Object Created
Object Destroyed
Object Destroyed
Object Destroyed
벡터를 반복하고 각 개체를 명시적으로 삭제합니다. 힙의 메모리가 해제되었습니다. 따라서 .clear()
메서드를 사용하여 벡터의 모든 요소를 제거할 수 있습니다.
이제 MyClass*
개체를 명시적으로 삭제해야 합니다. 벡터는 이러한 개체를 삭제하지 않습니다. 따라서 벡터에 간단한 클래스 개체가 있으면 해당 개체가 자동으로 삭제된다고 말할 수 있습니다.
그러나 포인터가 있는 경우 명시적으로 삭제해야 합니다.