std::vector::pop_back是否将其中对象的指针设置为nullptr?

Does std::vector::pop_back set the pointers of the objects in it to nullptr?

std::vector::pop_back是将其中对象的指针设置为nullptr还是直接删除对象?

我看到矢量的大小减小了,所以对象显然被删除了,但我想知道指针是否设置为 nullptr 还是我必须手动设置?

编辑:我根据包含指针的向量问了这个问题。示例:vector<Bitmap*>.

来自http://en.cppreference.com/w/cpp/container/vector/pop_back

void pop_back();

删除容器的最后一个元素。
在空容器上调用 pop_back 是未定义的。
除了 back()end() 之外,没有迭代器或引用是无效的。

除此之外我不会假设或推断任何事情。

逻辑上,弹出对象的'destructor'被调用。但是请注意,对于整数类型(指针是整数类型),'destructor' 是空操作。

这意味着:

此处Thing::~Thing()将被调用:

std::vector<Thing> things;
things.emplace_back({});
things.pop_back();

这里不会调用任何东西,你会发生资源泄漏

std::vector<Thing*> things;
things.emplace_back(new Thing{});
things.pop_back();

这里std::unique_ptr<Thing>::~std::unique_ptr<Thing>()会被调用,不会有资源泄露

std::vector<std::unique_ptr<Thing>> things;
things.emplace_back(std::make_unique<Thing>());
things.pop_back();

http://www.cplusplus.com/reference/vector/vector/pop_back/

结束迭代器和引用已删除元素的任何迭代器、指针和引用均无效。 引用其他未删除元素的迭代器、指针和引用保证继续引用它们在调用之前引用的相同元素。

如果您的向量直接包含对象,则调用对象的析构函数。 显然,如果您使用的是指针向量(具有所有权),则必须自己调用 delete。

std::vector<P*> myvector;
...
delete myvector.back();
myvector.pop_back();