导致内存泄漏的c++ post操作符
C++ post operator(s) causing memory leaks
我正在为库实现一个自定义迭代器,并且正在重载操作符++和——。我的前缀操作符可以完美地工作,但是我的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);
}
请注意,在迭代器上使用自增前/自减操作符比使用自增后/自减操作符更可取的主要原因是必须进行复制。
相关文章:
- 如何使用curlpp通过POST方法上传文件和json数据
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 命名空间 pqxx 无法识别 - 将 libpqxx 添加到 Windows 上的 Visual Studio Post
- 如何使用boost/beast从HTTP POST请求中解析和提取有效负载?
- 如何使用 curl 将 POST 请求从 python 重写为 C++
- 从简单的 POST 请求中解析异常
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 使用 cpp-httplib 的 POST 请求
- POST Arduino 传感器值通过 Flask API 发送到本地 Sqlite db
- C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)
- C++中的 cURL POST 请求
- C++ Schannel POST 400 错误代码错误请求
- c++curl返回413请求实体过大,但是post大小远小于max大小
- HTTP POST 请求不允许我定义上下文类型
- 如何在c++中使用libcurl发送POST请求并接收它
- cpp libcurl 在 HTTP post 调用中发送 zip 文件,而不使用 multipart\form-da
- 使用 http post 在 FCM 中推送通知
- 我想将 POST 请求从 arduino 发送到 mysql 工作台并保存值
- 如何捕获从 MFC Web 浏览器 c++ 发出的 GET/POST 请求
- 使用 HTTP 方法 POST 或 PUT 上传数据