std::vector::pop_back
将其中对象的指针设置为nullptr
还是仅删除对象?
我看到我的向量的大小减小了,所以对象显然被删除了,但我想知道指针是设置为nullptr
还是我必须手动执行?
编辑:我根据包含指针的向量提出了这个问题。示例:vector<Bitmap*>
。
从逻辑上讲,弹出对象的“析构函数”被调用。但是请注意,对于整数类型(并且指针是整数类型),“析构函数”是无操作的。
这意味着:
这里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();
来自http://en.cppreference.com/w/cpp/container/vector/pop_back
void pop_back();
移除容器的最后一个元素。
调用pop_back
空容器是未定义的。除了和
之外,没有迭代器或引用无效。 back()
end()
除此之外,我不会假设或推断任何事情。