C++填充指向指针**列表的指针,该列表指向指针地址
C++ fill Pointer to pointer ** list which point to pointer address
I填充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中的所有指针都指向上次创建的对象。这意味着,所有对象**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中指向指针的每个指针都有唯一的对象,而不是相同的对象。
这就是我如何免费列出
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*obj=新的objekt();List.push_back(&obj)
我应该删除列表中指向指针的指针吗?(我不是指用新的创建的对象)
objekt**po=*itL;删除po
您存储的是指向obj
的指针,而不是它包含的内容。
因此,在列表中有指向obj
的i
指针。
线路:
List.push_back(&obj);
应为:
List.push_back(obj);
我一直认为循环中的objekt是每一轮的新对象(上面的代码)。
你的想法是正确的。
它使List中的所有指针都指向最后创建的对象。
实际上,所有指针(类型为objekt **
)都指向已销毁的对象(类型为objekt *
)。据说他们在"晃来晃去"。分离悬挂的指针具有未定义的行为。
看起来objekt*obj只创建了一次,每个循环只创建新的objekt
未定义的行为可以看起来像任何东西。
- 为什么第一个循环(循环1)与第二个循环(环路2)不同
在第一个循环中,指针是在循环体中声明的自动变量。由于它们有自动存储,变量在作用域的末尾被销毁(在这种情况下是循环体)。因此,向量中的指针是悬空的,并且间接指向它们具有未定义的行为。
在第二个循环中,指针具有动态存储。它们在被删除之前不会被销毁。因此,不存在悬空指针,并且对指针的间接性进行了很好的定义。
- 我应该删除列表中指向指针的指针吗?(我不是指用新创建的对象)
必须delete
new
返回的所有指针,否则内存将泄漏。您不能delete
任何东西否则行为将未定义。
在第二个示例中,*itL
是用new
创建的,因此必须将其删除。
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 如何将共享指针列表传递到pybind11中的c++对象
- C++:如何初始化包含具有给定键的指针列表的映射
- 使用继承的指针列表复制构造函数或重载运算符=
- 我应该如何在工厂类中存储弱指针列表?
- Qt单元测试:指针列表上的QCOMPARE函数
- 如何正确释放要配对的指针列表?
- 如何在 c++ 上对指针列表进行排序
- 从地图复制到指针列表
- 我对C 中共享指针列表进行排序的功能未完成类型
- const_iterator引用的指针列表
- 在 c++ 中生成字符串到 std::指针列表的映射
- 访问链表中的结构(带有指向其子实现的指针列表的树)
- 有没有办法使用基于范围的迭代器来迭代对指针列表值的引用?
- 使用迭代器指针 (C++) 从对象指针列表中删除元素
- 无法列出定制类型的指针列表
- 创建指针列表的正确范例是什么
- 如何将指向指针列表的私有指针作为 const 返回
- C++填充指向指针**列表的指针,该列表指向指针地址