gpt4 book ai didi

c++ - 我是否应该假设一个对象的析构函数在从 STL 容器中移除后立即被调用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:55 25 4
gpt4 key购买 nike

考虑以下代码:

class T { ... }; // T has a non-trivial destructor

void foo() {
std::vector<T> v( 5 );
v.pop_back();

...
}

v.pop_back() 之后,STL 是否保证 T::~T() 已经为 v.back() ?注意:该问题适用于任何移除元素的 vector 方法(例如 resize()erase() 等...)

我正在为我的应用程序编写容器类,我希望它们尽可能符合标准库使用的原则。如果我的容器类不做这个保证,有没有风险?

最佳答案

C++11 § 23.2.3 描述了对序列容器的要求。

pop_back() 的条目说它“销毁最后一个元素。”

我想您可能会争辩说它没有立即明确说明。不过,我怀疑这是暗示。

另一个需要注意的要求在 § 23.2.1 中。它说的是容器的析构函数

note: the destructor is applied to every element of a; all the memory is deallocated.

所以我想您可以推迟销毁被移除的元素,只要它们在容器被销毁之前被销毁即可。

综上所述,如果您真的想遵循标准的原则,我可以自信地说,标准作者会期望被删除的元素会立即被销毁。

关于c++ - 我是否应该假设一个对象的析构函数在从 STL 容器中移除后立即被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21314793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com