c++ - c ++:将void指针转换为shared_ptr
问题描述
我在 QAbstractItemModel 派生类 qt treeview MV 中实现(覆盖)索引函数,其中指向指针的转换如下所示:
TreeItem* parentItem = static_cast<TreeItem*>(parent.internalPointer());
内部指针在哪里void *QModelIndex::internalPointer() const
我应该如何更改代码以将void pointer
fromparent.internalPointer()
转换为std::shard_ptr<TreeItem>
?
解决方案
既然你说shared_ptr
应该拥有指针的所有权(delete
它自动),你想要这个:
std::shared_ptr<TreeItem> parentItem(static_cast<TreeItem *>(parent.internalPointer()));
或者,分配给现有的shared_ptr
:
parentItem = std::shared_ptr<TreeItem>(static_cast<TreeItem *>(parent.internalPointer()));
或者
parentItem.reset(static_cast<TreeItem *>(parent.internalPointer());
推荐阅读
- html - 应用过滤器时忽略 z-index
- swift - Swift print() : 在 CLI 命令中覆盖/重写行
- postgresql - 在 PostgreSQL 中使用 UNION 时根据条件选择行
- c - 通过 UART 从 PIC16F 获得奇怪的输出
- r - 在同一页面中渲染 highchartOutput + wordcloud2Output 时的闪亮问题
- vba - 在 Word (VBA) 中使用复选框形状出现编译错误
- python - SQLite3插入查询错误添加字符串/
- .net - DotNet CLI 在安装过程中不检查任何包存储库,所以所有包安装都失败?
- css - 如何从 React 中的另一个事件中更改对象集合的 css 样式?
- ios - SceneKit - 如何平铺自定义多边形