C ++ 11 rvalue引用vs引用vs指针vs" normal"成员

时间:2016-02-26 21:13:23

标签: class pointers c++11 reference rvalue-reference

我有这样的代码:

class A{
};

class B{
   B(A &&a) : a(std::move(a)){};
   A a;
}

A a{};
B b{ std::move(a) };
// a is unusable

我使用rvalue,因为我不希望对象被复制。

我正在考虑将class B更改为使用引用:

class A{
};

class B{
   B(A &a) : a(a){};
   A &a;
}

A a{};
B b{ a };
// a is usable

除了实时问题外,是否会产生任何负面影响?我没有重新分配a object,所以我不需要指针。但我应该考虑一下吗?

1 个答案:

答案 0 :(得分:1)

为什么不让调用者决定是移动还是复制其A对象?

class A {};

class B {
public:
    B(A a_param) : a(std::move(a_param)) {}
private:
    A a;
};

void f1() {
    A a;
    B b{a}; // Makes a copy, a is still usable.
}

void f2() {
    A a;
    B b{std::move(a)}; // Does a move, a is not usable.
}

void f3() {
    B b{A{}}; // Does a move of the temporary object.
}