导致内存泄漏的c++ post操作符

C++ post operator(s) causing memory leaks

本文关键字:c++ post 操作符 泄漏 内存      更新时间:2023-10-16

我正在为库实现一个自定义迭代器,并且正在重载操作符++和——。我的前缀操作符可以完美地工作,但是我的post操作符会导致内存泄漏。

avl_iterator& operator++()
    {
        _node = utilities::next_node( _node );
        return (*this);
    }
avl_iterator& operator ++( int ) {
        avl_iterator temp(*this);
        ++(*this);
        return(temp);
    }
avl_iterator& operator -- () {
        _node = utilities::prev_node( _node );
        return (*this);
    }
avl_iterator& operator -- ( int ) {
        avl_iterator temp(*this);
        --(*this);
        return(temp);
    }

我意识到这是因为我正在返回一个临时变量,但我似乎无法想到(或找到)更好的方法来做到这一点。

返回一个临时变量是完全可以的:它将被复制回调用者,而原始变量将被释放。只有当类没有正确管理其资源时,它才会成为一个问题。

你的解决方案有问题的原因是因为返回副本,而是返回对局部变量temp的引用,这是未定义的行为。

要解决这个问题,您应该将自增/自减操作符更改为

avl_iterator operator -- ( int ) {
    avl_iterator temp(*this);
    --(*this);
    return(temp);
}

avl_iterator operator ++( int ) {
    avl_iterator temp(*this);
    ++(*this);
    return(temp);
}

请注意,在迭代器上使用自增前/自减操作符比使用自增后/自减操作符更可取的主要原因是必须进行复制。