在我的类中,我使用 std::vector
等作为成员变量,它们带有自己的 move 构造函数。我没有为我的类显式声明 move 构造函数,而且它们大部分都没有隐式声明。
如果使用右值调用我的类的隐式复制构造函数或隐式赋值运算符,是否复制或 move 了具有 move 构造函数的成员?
如果它们被 move ,在使用具有可 move 可构造成员的类时是否有任何理由试图避免临时对象?
最佳答案
如果您的类没有显式声明 move 构造函数/赋值运算符并且它们也没有隐式声明,那么隐式声明的复制构造函数/赋值运算符将不会 move 成员,而是复制它们。
如果为您的类隐式声明 move 构造函数/赋值操作,它们将被 move 。你说他们不是——为什么?你的类有自定义析构函数吗?您应该争取一种不需要自定义 dtor、复制/move ctor 和复制/move 赋值操作的设计 - 有时称为“零规则”。
如果你确实需要一个自定义的 dtor,你应该显式地声明 move ctor/assignment-op 来使用 move 语义。如果您的编译器支持,您可以将它们声明为默认值。
关于c++ - 临时对象中的成员变量是否尽可能隐式 move ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16612069/