从vector2传递指向vector1并清除vector1安全吗?

时间:2015-10-17 17:17:43

标签: c++ pointers

我仍然是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

1 个答案:

答案 0 :(得分:1)

如果您正在谈论的指针是原始指针,那么没有。销毁原始指针并不会任何指向它们所指向的内容。

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

首先你有一组指向事物的指针,然后你有另一组指针指向相同的东西(即指针是相同的)。然后你摆脱了第二组指针。

它可以更容易地写成:

objects2 = objects1;

与您的会员复制完全相同。

如果这些指针的语义为std::unique_ptr,那么,您就无法将它们复制到另一个向量中。如果通过&#34;给予&#34;你是说&#34;移动&#34;然后清除第二个向量释放那些指针指向的内存。

如果这些指针具有std::shared_ptr的语义,那么通过将它们提供给另一个向量,您只需递增引用计数,并且在第一个向量中提供原始指针并没有去在任何地方,清除第二个向量只会将引用计数减少回原来的值。