【发布时间】:2015-01-27 08:23:31
【问题描述】:
我一直在玩 std::vector 以了解何时构造、销毁、复制构造和移动构造对象。为此,我编写了以下程序
#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] 被移动构造到新的 a[0]。但是,对于 libc++ 和 libstdc++,似乎调用的是复制构造函数而不是移动构造函数。这种行为有什么原因吗?
【问题讨论】: