gpt4 book ai didi

c++ - 默认移动构造函数

转载 作者:太空狗 更新时间:2023-10-29 19:52:14 31 4
gpt4 key购买 nike

我有一个类

class MyMatrix {
public:
MyMatrix() = default;
MyMatrix(const MyMatrix&) = default;
~MyMatrix() = default;

// some custom methods..

private:
std::vector<float> data;
}

因为我的所有数据都在一个 vector 中,所以我认为 RAII 应该负责内存。

我的问题是:我还应该包括 MyMatrix(MyMatrix&&) = default; 行吗?我的代码是否会从中受益,或者如果这样做我会做错什么吗?

最佳答案

当您提供一个用户声明的复制构造函数(或复制赋值运算符)时,移动构造函数移动赋值运算符都不是声明。

MyMatrix(const MyMatrix&) = default; // <- though `defaulted`, it *is* user-declared...

如果你想让你的类受益于移动语义,在这种情况下,你需要自己声明它们(你仍然可以默认它们)。由于您只有具有明确定义的复制和移动语义( vector )的成员,因此默认实现就可以了。

MyMatrix(MyMatrix&&) = default;

添加该声明将导致自动删除 复制赋值运算符。如果你想要它,你也必须声明它!

最后,您只需删除复制构造函数的声明,它就会按您希望的方式执行。 (您还可以自动为您设置默认的移动和复制赋值运算符)。

这是一个slideshare Howard Hinnant 就此问题(使用漂亮的表格)向您展示了编译器生成或不生成的内容,具体取决于您声明的内容。

关于c++ - 默认移动构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29006563/

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