我有这个代码:
class Item {
public:
Item() {
cout << "constructor" << endl;
}
Item(const Item& a) {
cout << "copy constructor" << endl;
}
Item& operator=(const Item& a) {
cout << "copy assignment" << endl;
}
Item(Item && a) {
cout << "move constructor" << endl;
}
Item& operator=(Item && a) {
cout << "move assignment" << endl;
}
~Item() {
cout << "destructor" << endl;
}
};
该类Item
旨在模拟一个vector
. 打印语句帮助我理解将被称为什么。
现在假设我有:
class A {
public:
Item x;
A(Item & a) {
x = std::move(a);
}
};
这个想法是,实际上,Item
将是 avector
并且我想初始化我的类,A
传递给它一个值向量。但我不希望在构造A
. 这就是我想要验证的。我这样称呼这段代码:
Item a;
A q{a};
当我运行它时,我得到:
constructor
constructor
move assignment
[1] 17802 trace trap ./main
谁能向我解释为什么我会得到例外?
永远记住编译时带有警告。
您声明了两个具有非返回类型的函数(即您的赋值函数)
void
,并且从未返回任何内容。这是未定义的行为。