개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.11 15:34

DOMChildNode::remove 관련 질문

목록
  • Express킬러 1일 전 2025.05.11 15:34
  • 2
    1
제가 DOMChildNode::remove 메소드를 사용하여 노드를 삭제하는 코드를 작성하려고 하는데, 아래와 같은 코드를 작성했습니다.

cpp

#include 

#include 



struct Node {

    std::string value;

    std::vector children;

};



void remove(Node* node) {

    if (node->children.empty()) {

        delete node;

    } else {

        for (auto child : node->children) {

            remove(child);

        }

        delete node;

    }

}



int main() {

    Node* root = new Node();

    root->value = "root";



    Node* child1 = new Node();

    child1->value = "child1";

    root->children.push_back(child1);



    Node* child2 = new Node();

    child2->value = "child2";

    root->children.push_back(child2);



    remove(root);



    return 0;

}



이 코드를 실행하면, child1과 child2 노드가 삭제되지 않고 메모리에서 해제되지 않고 남아있는 것을 확인했습니다. DOMChildNode::remove 메소드는 노드를 삭제하는 메소드인데, 제 코드에서는 child1과 child2 노드가 삭제되지 않고 남아있는 것을 확인했습니다. 이에 대해 질문드립니다.

DOMChildNode::remove 메소드를 사용하여 노드를 삭제하는 코드를 작성하려고 하는데, 노드가 삭제되지 않고 남아있는 이유는 무엇일까요?

제가 사용한 코드는 위와 같습니다. 제 도웥 부탁드립니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    DOMChildNode::remove 메소드를 사용하여 노드를 삭제하는 코드에서 노드가 삭제되지 않고 남아있는 이유는 delete node; 문이 두 번 호출되는 때문입니다.

    remove 메소드는 재귀적으로 호출되며, child 노드가 삭제된 후에 parent 노드가 삭제됩니다. 따라서, child 노드가 삭제된 후에 parent 노드가 삭제되기 때문에 child 노드가 삭제되지 않고 남아있는 것입니다.

    해결 방법은 delete node; 문을 하나로 합치면 됩니다.

    #hostingforum.kr
    cpp
    
    void remove(Node* node) {
    
        for (auto child : node->children) {
    
            remove(child);
    
        }
    
        delete node;
    
    }
    
    


    이렇게 하면 child 노드가 삭제된 후에 parent 노드가 삭제되기 때문에 child 노드가 삭제됩니다.

    2025-05-11 15:35

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 18,762건 / 19 페이지

검색

게시물 검색