移动与复制构造函数/赋值的语句分组和排序

时间:2015-04-22 03:06:45

标签: c++ c++11 move-semantics

我有一个带有移动构造函数,赋值运算符,复制构造函数,赋值运算符的类A

该课程使用(非朋友,非会员)

template <typename T>
const A<T> operator*(A<T> lhs, const A<T>& rhs)
{
    lhs *= rhs;
    return lhs;
}

template <typename T>
A<T>& A<T>::operator*=(const A<T>& rhs)
{
    // assert sizes are the same
    // This is essentially a std::vector<T> wrapper
    for (each variable) {
        variable *= rhs.variable;
    }
    return *this;
}

如果在我的main()函数中,我打电话给: obj1 = (obj2 * obj3);,然后是日志输出(由于拷贝构造函数中标记不良等原因,某些名称可能有误):

obj2 copy-constructed
obj2 move-constructed
obj1 copy-assigned from obj2

而对obj1 = obj2; obj1 *= obj3;我得到:

obj1 copy-assigned from obj2

看起来乘法运算符将被称为相同的方式。

第二种实现真的如此不同吗? (至关重要的是,这更好,对吗?)有些阅读使得这些事情都被称为合乎逻辑似乎是合乎逻辑的 - 我只是好奇我是否可以通过将乘法分成两个语句来跳过大量的调用,等

Also:非朋友,非成员运算符*(..)按值获取第一个参数,然后不需要创建临时对象。这仍然是使用复制构造函数(构造参数),但是this link (pass-by-value-or-const-reference)使我觉得通过这种方式定义它可能会变得更糟。是吗?

0 个答案:

没有答案