向量推回中复制构造函数的多次调用
在给定的代码片段中,向量对象 myints 的 push_back 方法调用副本构造函数超过两次,与最初的预期相矛盾。这引发了有关向量内部行为的问题。
解释:
第一次推回:
- A使用 x 将新元素插入到向量中。这会触发一次复制操作:使用参数初始化新元素。因为 x 的默认构造函数将 my_int 初始化为零,所以复制构造函数报告零。
第二次推回和重新分配:
- 第二个元素是推回。然而,向量的容量已超出,需要重新分配。由于 Myint 缺少隐式移动构造函数,因此使用复制构造函数。
- 第一个元素被复制到新内存中,保留其零值。随后,复制 x 以初始化第二个元素,并将 my_int 设置为 1,如复制构造函数的输出所示。
- 这将导致总共 3 次复制构造函数调用。
调用次数:
- 由于初始向量容量的原因,复制构造函数调用的次数可能会因不同的实现而异。不过,最少调用两次。
- 可以避免重新分配,从而减少复制操作,通过使用 Reserve(2) 提前增加向量的容量。
减少复制操作:
- 或者,emplace_back 方法可用于元素插入。它不需要复制或移动,直接将参数转发给元素的构造函数。
总之,push_back 方法可能会由于内部向量重组而导致多次复制构造函数调用。为了避免这种情况,可以使用reserve()来增加容量,或者可以使用emplace_back来高效地插入元素而无需复制。
以上是为什么 `push_back` 在向量中多次调用复制构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!