好的,我正在使用C ++ STL容器(目前为vector<customType*>
)。
现在我需要从容器中删除元素,
但是使用擦除解构对象,这是不好的,因为我把它取下来,并把它放到一个变量做一些处理然后再到另一个。
目前我的代码非常讨厌,我只是在读完之后把NULL放到我的变量中,然后把if(Q [ii] NULL)继续。 但这并不是那么好。
答案 0 :(得分:3)
如果你有一个指针容器(听起来就像你将NULL
分配给“擦除”元素那样),那么从容器中删除一个元素就不会删除指向的对象。你自己负责这样做。
如果你有一个容器对象(好的,非指针对象),那么你需要在删除之前将该元素复制出容器。
答案 1 :(得分:1)
你不能在不破坏它的情况下从矢量中删除元素。如果向量存储指针,则可以将指针移除到元素,这实际上不会破坏元素本身。
答案 2 :(得分:0)
STL容器操作具有复制语义。因此,每次添加或删除元素时,都会相应地调用构造函数或析构函数(假设为非基本类型)。如果向量在过程中被调整大小,则所有对象将被复制构造并且原件被破坏。没有办法避免所有这些复制。
避免开销的唯一方法是使用(智能)指针向量而不是对象。