포인터가 가리키는 개체가 해제되는 것을 방지하는 데 문제가 있습니다. 나는 이것이 문제라고 생각하지만 그것을 해결하는 방법을 모른다.포인터가 아무 것도 가리 키지 않도록 방지
내 코드 :
enum TOKEN_TYPE {
OPEN, CLOSE, TEXT
};
struct Token {
int type;
std::string value;
};
typedef std::vector<Token>::iterator token_it;
Tree::Tree(token_it start) {
root.value = start->value;
createNode(++start, &root);
}
void Tree::createNode(token_it it, Node* parent) {
Node current;
current.value = it->value;
current.parent = parent;
if(parent != 0) {
parent->children.push_back(¤t);
}
++it;
while(it->type != TOKEN_TYPE::CLOSE && it->value != current.value) {
if(it->type == TOKEN_TYPE::OPEN) {
createNode(it, ¤t);
}
++it;
}
}
나는 프로그램이 가비지 콜렉션이 parent
아무것도를 가리키는 잎 current
비우는 createNode
통화를 종료하기 시작 말까지 모든 것이 완벽 프로그램을 통해 스테핑 시도; 적어도 그것이 내가 생각하는 것입니다.
C++는 기본적으로 가비지 컬렉터가 없습니다. 코드는 당신이 생각하는대로 확실히 일어나지 않습니다. 사람들이 코드에 무엇이 잘못되었는지를 빨리 알기를 원한다면 컴파일 된 것을 제공해야합니다. 그래서 우리는 스스로 시도해 볼 수 있습니다. –
수정 : 명시 적으로 그렇게하지 않는 한 _explicitly allocated_는 삭제되지 않습니다. 여기서 문제는 '현재'가 스택에 있고 범위를 벗어나면 파괴된다는 것입니다. – Chowlett
그렇다면'Node'의 소멸자가 호출되지 않으면 왜 호출되고 있습니까? (Chowlett ninja said) – Lerp