c++ - C++填充指向指针**列表的指针指向指针地址
问题描述
我填写 std::list 列表。如何正确地做到这一点?
当我这样做时:
objekt * obj = new objekt();
objekt ** objP = &obj;
List.push_back(objP);
或这个
objekt * obj = new objekt();
List.push_back(&obj);
这是工作。但是当我在循环中这样做时
// Loop 1
for (int i = 0; i < 2000; i++, mi++)
{
if (mi >= 37) mi = 0;
objekt * obj = new objekt(name[mi], i+1);
List.push_back(&obj);
}
它使 List 内的所有指针都指向最后创建的对象。也就是说,所有的object ** ObjectPointer 都指向一个objekt * obj。看起来 objekt * obj 只创建一次,并且每个循环只创建新的 objekt,因此 List 中的每个项目都指向一个地址 objekt。我一直认为循环内的 objekt 是每一轮的新对象(上面的代码)。
因此,我为指向指针的指针创建了新的。
// Loop 2
for (int i = 0; i < 2000; i++, mi++)
{
if (mi >= 37) mi = 0;
objekt * o = new objekt(name[mi], i+1);
List.push_back(new objekt*(o));
}
现在每个指向 List 内指针的指针都有唯一的 objekt 不一样。
这就是我免费列表的方式
std::list<objekt**>::iterator itL = List.begin();
while (itL != List.end())
{
objekt ** po = *itL;
objekt *& o = *(*itL);
List.erase(itL);
delete o;
delete po;
o = nullptr;
po = nullptr;
itL = List.begin();
}
问题是
为什么第一个循环(循环 1)与填充列表的第二个循环(循环 2)不同?
当我像这样插入 objekt 时:
对象 * 对象 = 新对象(); List.push_back(&obj);
我应该删除指向列表内指针的指针吗?(我不是指用新创建的对象)
对象 ** po = *itL; 删除宝;
解决方案
您正在存储指向 的指针obj
,而不是它包含的内容。
所以在列表中你有i
指向obj
.
该行:
List.push_back(&obj);
应该 :
List.push_back(obj);
推荐阅读
- python - 从您找到它们的文件夹中按顺序重命名多个文件。如果可能,使用名称列表重命名
- python - 将多个值插入一列(Python - Pandas)
- azure-databricks - Azure Databricks 群集问题
- javascript - 如何从单个 API 查询中循环父级和过滤兄弟级?
- server - Monet DB 服务器启动错误 BBPcheckbats: cannot stat file
- angular - 在 Angular srdoc iframe 中通过 @Input() 传递数据
- warp10 - 如何在没有互联网连接的情况下在我的 linux VM 上安装 warp10-ext-flows
- netbeans - MPLAB X Arduino 导入插件问题
- python - 如何使用 3D 数组的 seaborn 制作嵌套/分组箱线图
- pandas - 如何将月值转换为 nan?