gpt4 book ai didi

C++ post 运算符导致内存泄漏

转载 作者:太空狗 更新时间:2023-10-29 21:02:32 26 4
gpt4 key购买 nike

我正在为库实现一个自定义迭代器,并且正在重载运算符++ 和 --。我的这些前缀运算符工作得很好,但我的后运算符会导致内存泄漏。

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);
}

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

最佳答案

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

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

要解决这个问题,您应该将后递增/递减运算符更改为

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

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

请注意,必须复制是一个广泛流传的建议背后的一个主要原因,即更喜欢迭代器上的预递增/递减运算符而不是它们的后递增/递减对应物。

关于C++ post 运算符导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15148607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com