C++에서 물결표 연산자를 사용하여 클래스 소멸자 정의
이 기사에서는 C++에서 물결표 연산자를 사용하여 클래스 소멸자를 정의하는 방법에 대한 여러 방법을 보여줍니다.
물결표 연산자~
를 사용하여 C++에서 클래스 소멸자를 선언합니다
소멸자는 클래스 객체의 리소스 할당 해제를 처리하는 특수 멤버 함수입니다. 클래스 생성자와 달리 지정된 클래스에 대해 하나의 소멸자 함수 만 있습니다. 클래스 소멸자는 클래스와 동일한 이름에 접두사~
물결표 연산자를 추가하여 선언됩니다.
대부분의 경우 동적 메모리에 할당해야하는 데이터 멤버가있는 경우 클래스의 소멸자를 정의해야합니다. 코드는 소멸자 함수에서 이러한 멤버를 명시 적으로 할당 해제해야합니다. 다음 예제는std::string
의 래퍼 인CustomString
클래스를 보여줍니다. 아이디어는str
포인터에 메모리를 할당하는 생성자로 클래스를 정의하는 것인데, 이는 클래스가 소멸자를 정의해야 함을 의미합니다. CustomString
에는 두 개의 생성자가 있으며 그중 하나는 복사 생성자입니다.
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
class CustomString {
public:
explicit CustomString(const string &s = string()) : str(new string(s)) {}
CustomString(const CustomString &p) : str(new string(*p.str)) {}
~CustomString() { delete str; }
string &getString() { return *str; };
private:
string *str;
};
int main() {
CustomString str1("Hello There!");
CustomString str2(str1);
cout << "str1: " << str1.getString() << endl;
cout << "str2: " << str2.getString() << endl << endl;
}
출력:
str1: Hello There!
str2: Hello There!
C++에서 클래스 개체가 파괴되기 전에 코드 실행
이전 방법이 보여준 것처럼 클래스 소멸자는 데이터 멤버의 메모리를 정리합니다. 그러나 클래스 멤버는 종종 프로그램 스택에 선언 된 일반적인 데이터 유형일뿐입니다. 이 경우 소멸자는 프로그래머에 의해 명시 적으로 선언되지 않을 수 있지만 컴파일러는 소위 합성 소멸자를 정의합니다.
일반적으로 클래스 멤버는 소멸자 함수 코드가 실행 된 후에 소멸됩니다. 따라서StringArray
클래스 인스턴스가 범위를 벗어나서 해당 텍스트를 콘솔에 출력하는 방법을 보여줄 수 있습니다.
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
class StringArray {
public:
StringArray() : vec(), init(new int[10]){};
~StringArray() {
delete[] init;
cout << "printed from destructor" << endl;
}
string getString(int num) {
if (vec.at(num).c_str()) {
return vec.at(num);
} else {
return string("NULL");
}
};
void addString(const string& s) { vec.push_back(s); };
uint64_t getSize() { return vec.size(); };
private:
vector<string> vec;
int* init;
};
int main() {
StringArray arr;
arr.addString("Hello there 1");
arr.addString("Hello there 2");
cout << "size of arr: " << arr.getSize() << endl;
cout << "arr[0]: " << arr.getString(0) << endl;
}
출력:
size of arr: 2
arr[0]: Hello there 1
printed from destructor
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook