C++에서 삭제 연산자 사용
이 기사에서는 C++에서delete
연산자를 사용하는 방법에 대한 몇 가지 방법을 설명합니다.
delete
연산자를 사용하여 개체에 할당 된 리소스 해제
new
연산자를 사용하여 동적으로 할당 된 오브젝트는 프로그램 종료 전에 해제되어야합니다. 이는 호출자가delete
조작을 명시 적으로 호출해야 함을 의미합니다. 생성자 이니셜 라이저는new
연산자로 객체를 선언하고 초기화하는 데 사용할 수 있습니다. 다음 예제 코드는 이러한 시나리오를 보여준 다음main
함수에서 반환하기 전에 해당 리소스를 해제합니다. 힙 개체에 대해delete
연산자를 호출하지 않으면 메모리 누수가 발생하여 장기 실행 프로세스에 막대한 메모리 사용량이 발생합니다.
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
int *num = new int(1024);
auto *sp = new string(10, 'a');
cout << *num << endl;
cout << *sp << endl;
for (const auto &item : *vp) {
cout << item << ", ";
}
cout << endl;
delete num;
delete sp;
return EXIT_SUCCESS;
}
출력:
1024
aaaaaaaaaa
new
및delete
연산자는 표준 라이브러리 컨테이너에서도 사용할 수 있습니다. 즉,std::vector
객체는 다음 예제 코드에서 단일 문으로 할당되고 초기화됩니다. new
연산자가vector
에 대한 포인터를 반환하면 일반vector
객체와 마찬가지로 연산을 수행 할 수 있습니다.
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::vector;
int main() {
auto *vp = new vector<int>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for (const auto &item : *vp) {
cout << item << ", ";
}
cout << endl;
delete vp;
return EXIT_SUCCESS;
}
출력:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
delete
연산자를 사용하여 벡터의 요소 해제
동적으로 할당 된 배열에delete
연산자를 사용하는 것은 약간 다릅니다. 일반적으로new
및delete
는 객체에서 한 번에 하나씩 작동하지만 배열에는 한 번의 호출로 할당되는 여러 요소가 필요합니다. 따라서 다음 예제 코드에 설명 된대로 대괄호 표기법을 사용하여 배열의 요소 수를 지정합니다. 이와 같은 할당은 다른 멤버에 액세스하기 위해 역 참조 할 수있는 첫 번째 요소에 대한 포인터를 반환합니다. 마지막으로, 배열이 필요하지 않은 경우 빈 대괄호를 포함하는 특수delete
표기법으로 해제해야합니다. 이는 모든 요소가 할당 해제되었음을 보장합니다.
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::vector;
constexpr int SIZE = 10;
constexpr int MIN = 1;
constexpr int MAX = 1000;
void initPrintIntVector(int *arr, const int &size) {
std::random_device rd;
std::default_random_engine eng(rd());
std::uniform_int_distribution<int> distr(MIN, MAX);
for (int i = 0; i < size; ++i) {
arr[i] = distr(eng) % MAX;
cout << setw(3) << arr[i] << "; ";
}
cout << endl;
}
int main() {
int *arr1 = new int[SIZE];
initPrintIntVector(arr1, SIZE);
delete[] arr1;
return EXIT_SUCCESS;
}
출력:
311; 468; 678; 688; 468; 214; 487; 619; 464; 734;
266; 320; 571; 231; 195; 873; 645; 981; 261; 243;
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