【发布时间】:2021-03-02 10:19:50
【问题描述】:
我有以下代码sn-p
#include <iostream>
#include <vector>
class Move {
private:
int* data;
public:
void set_data_value(int d) {
*data = d;
}
int get_data_value(){
return *data;
}
Move(int d);
Move(const Move &source);
~Move();
};
Move::Move(int d) {
std::cout << "ctor being called" << std::endl;
data = new int;
*data = d;
}
Move::Move(const Move& source) {
std::cout << "copy ctor being called" << std::endl;
data = new int;
*data = *source.data;
}
Move::~Move() {
std::cout << "deleting Move" << std::endl;
delete data;
}
int main() {
Move x{1};
Move y{x};
std::vector<Move> vec;
vec.push_back(x);
vec.push_back(y);
return 1;
}
这是输出:
ctor being called
copy ctor being called
copy ctor being called
copy ctor being called
copy ctor being called
deleting Move
deleting Move
deleting Move
deleting Move
deleting Move
我的问题是:当我只看到 3 个副本时,为什么要调用 4 次复制构造函数? (1 个来自 Move y{x},两个来自两个 push_back() 调用)
【问题讨论】:
-
不能保证您所描述的内容,但可能是由于在第一次调用
push_back()后向量只有1的容量,因此必须在第二次调用中调整大小(并复制元素)致电push_back()。
标签: c++ copy-constructor