防止指针指向任何内容

时间:2012-02-24 12:02:19

标签: c++ pointers

我无法阻止指针指向的对象被释放。我认为这是问题,但我不知道如何解决它。

我的代码:

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(&current);
    }

    ++it;
    while(it->type != TOKEN_TYPE::CLOSE && it->value != current.value) {
        if(it->type == TOKEN_TYPE::OPEN) {
            createNode(it, &current);
        }

        ++it;
    }
}

我尝试逐步完成程序,一切都很完美,直到程序开始退出createNode调用,垃圾收集释放currentparent指向任何内容;至少这是我认为正在发生的事情。

1 个答案:

答案 0 :(得分:3)

首先,C ++中没有垃圾收集。

其次,使用智能指针而不是原始指针:

void Tree::createNode(token_it it, SmartPtr<Node> parent)

第三,你的假设是正确的:

{
   Node current;
   parent->children.push_back(&current);
} //current is destroyed here

这是因为在{strong>自动存储中分配了current

如果您管理parent内的内存,则可以创建当前节点动态

{
   Node* current = new Node;
   parent->children.push_back(current);
}