【发布时间】:2021-08-15 13:28:15
【问题描述】:
我创建了以下类:
class CList
{
private:
Cust *custArray{new Cust [1]};
size_t arrayCap{1};
size_t used{0};
// also, the number of used cells
public:
CList() = default;
CList(CList&&);
class Cust
{
private:
const char *name;
const char *email;
size_t id;
public:
Cust()
{
}
Cust(const char *_name, const char *_email, size_t _id)
{
name = _name;
email = _email;
id = _id;
}
};
我需要帮助来实现CList(CList&&) 移动构造函数。它会简单地创建传递的对象的副本吗?
【问题讨论】:
-
移动构造函数,就像它说的那样,不要复制任何东西。它们移动值,使传递的对象处于未指定状态。
-
CList(CList&& x) : custArray{std::exchange(x.custArray, nullptr}, arrayCap{std::exchange(x.arrayCap, 0)}, used{std::exchange(x.used, 0)} { } -
如果没有必要,不要手动分配内存。如果你使用向量,你可以有:
class CList { private: std::vector<Cust> custArray; public: CList() = default; CList(CList&&) = default; };
标签: c++ move-constructor