我通常更喜欢尽可能使用引用而不是指针,我认为它使语法更清晰。在这种情况下,我有一个类:
class Foo
{
public:
Foo(Bar & bar) : bar_(bar) {}
private:
Bar & bar_;
};
operator=()
被编译器隐含地删除了这样一个类,因为一旦设置了引用,它就不能改变(我可以在技术上定义我自己的不会改变 bar_,但这不是必需的行为,所以我宁愿如果我尝试分配 foo,编译器会抱怨)。
我需要的是一个std::vector<Foo> v;
. 这在 C++11 之前是不可能的,因为模板参数必须是 CopyAssignable。事实上,当我打电话时v.push_back(Foo(bar));
,编译器会抱怨。但我觉得从 C++11 和 Move 语义开始就有可能。
我的问题是:是否有使用 C++11 的解决方法可以构建这样的向量,或者我是否陷入这种情况并且无法使用指针而不是引用?如果有解决方法,我将非常感谢代码片段,因为我不熟悉移动语义。