将std :: List与对象指针一起使用

时间:2013-12-30 14:37:47

标签: c++ list pointers stl

我正在编写一个四叉树,它存储指向stl列表中可碰撞对象的指针。 我希望四元树能够根据它们在世界中的位置将节点从一个节点移动到另一个节点,并希望得到确认的内容:

如果我从列表中删除指针,要将对象插入另一个树节点(例如父树节点),是否会调用指向对象的析构函数?为了澄清,我不希望对象被破坏,因为它被使用&在该计划的其他地方管理。

提前谢谢。

4 个答案:

答案 0 :(得分:3)

列表中的实际对象(即指针)将被销毁,但不会被指针指向。

开头可能有点令人困惑,但是如果你看到指针及其指向的内容,那么作为完全独立的实体,它会更有意义。

答案 1 :(得分:2)

对象的销毁由其存储持续时间决定。如果一个对象具有自动存储持续时间(如局部变量),则当它超出范围时将被销毁。如果一个对象是动态分配的(使用new),它只会在你delete上被销毁。如果它具有静态存储持续时间,则在程序结束时将被销毁。

如果您只是将指针从一个节点复制到另一个节点,并且只要它指向的对象没有按照上述规则销毁,指针将继续指向同一个有效对象。 / p>

答案 2 :(得分:1)

不,在STL中永远不会调用析构函数。它只会在您指向的对象上显式调用delete(或者当存储在堆栈中的对象超出范围时)或者使用智能指针时才会被销毁。

答案 3 :(得分:0)

我不确定你说的是否会发生,但无论如何,在删除实例之前将指针重置为NULL可能是一个好习惯。另外,请记住使尖头对象由正确的节点指向,该节点可能是指向您擦除的节点的节点。