gpt4 book ai didi

c++ - 在 std::vector 上调整大小不调用 move 构造函数

转载 作者:可可西里 更新时间:2023-11-01 17:21:29 25 4
gpt4 key购买 nike

<分区>

我一直在研究 std::vector 以了解对象何时被构造、析构、复制构造和 move 构造。为此,我编写了以下程序

#include <iostream>
#include <vector>

class Test {
public:
Test() {
std::cout << "Constructor called for " << this << std::endl;
}
Test(const Test& x) {
std::cout << "Copy Constructor called for " << this << std::endl;
}
Test(Test&& x) {
std::cout << "Move Constructor called for " << this << std::endl;
}
~Test() {
std::cout << "Destructor called for " << this << std::endl;
}
};

int main() {
std::vector<Test> a( 1 );
a.resize(3);

return 0;
}

当调整 a 的大小时,会发生重新分配。我的猜测是对象 a[0] 被 move 构造到新的 a[0]。但是,对于 libc++ 和 libstdc++,似乎调用了复制构造函数而不是 move 构造函数。这种行为有什么原因吗?

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