이것은 B + 트리의 노드입니다. 내 프로그램이 많은 메모리를 유출하기 때문에 스마트 포인터를 사용하고 싶었다. 스마트 포인터를 사용하여 코드를 변환하는 방법은 무엇입니까?간단한 트리 구현에서 스마트 포인터를 사용하는 방법
class node
{
public:
long* key;
int capacity;
node** nodes;
node* parent;
long* value;
node (int order) {
key = new long[order + 1];
value = new long[order + 1];
nodes = new node *[order + 2];
capacity = 0;
parent = NULL;
for (int i = 0; i <= order + 1; i++) {
this->nodes[i] = NULL;
}
}
~node() {
delete[] key;
delete[] value;
for (int i = 0; i <= order + 1; i++) {
delete nodes[i];
}
}
};
노드가 삭제 될 때 노드를 정리하기 위해 소멸자'node :: ~ node()'를 정의하지 않았기 때문에 메모리 누수가 발생합니다. 이것을 이해하지 못하면 스마트 포인터로 이동하는 것은 좋은 생각이 아닙니다. – paddy
@paddy 전 소멸자를 이해합니다. 이전 버전의 코드를 복사 한 것 같습니다. 미안해. 내가 그것을 업데이트 할거야. –
'delete [] nodes'는 포인터를 삭제하지 않습니다. 당신은 그것을 반복해야만합니다. – paddy