从vector2传递指针到vector1,并安全清除vector1

Passing pointers to vector1 from vector2 and clearing vector1 safe?

本文关键字:vector1 安全 清除 vector2 指针      更新时间:2023-10-16

我对c++还是有点陌生,这可能是一个简单的答案,但我有一种情况,我有一个向量,里面有一些指向对象的指针,我把这些指针给了另一个向量。清除第二个向量会导致孤儿或内存泄漏之类的问题吗?

编辑:我想我没有说清楚,这里有一个例子

#include <vector>
std::vector<SomeObject*> objects1; # Assume this is filled with objects
std::vector<SomeObject*> objects2; # Empty
for (unsigned int i = 0; i < objects1.size(); i++)
{
    objects2.push_back(objects1[i]);
}
# There's some code in between, the objects themselves aren't modified
# it's just organization
objects2.clear(); # The question is about this line here

如果你谈论的指针是原始指针,那么没有。销毁原始指针不会对所指向的对象做任何操作。

(除非它是指向动态分配的内存块的最后一个指针,在这种情况下,您会泄漏内存。)

首先你有一组指针指向某物,然后你有另一组指针指向同一物(即指针是相同的)。然后去掉第二组指针。

可以更容易地写成:

objects2 = objects1;

,这与你的逐个成员复制完全相同。


如果这些指针具有std::unique_ptr的语义,那么,你不能将它们复制到另一个向量上。如果你说的"给予"是指"移动",那么清除第二个向量就是释放这些指针所指向的内存。


如果这些指针具有std::shared_ptr的语义,那么通过将它们赋给另一个向量,您只是增加了引用计数,并且提供第一个向量中的原始指针没有移动,清除第二个向量只会将引用计数减少到之前的值。