添加Foo&到std :: vector

时间:2013-05-22 14:20:28

标签: c++ c++98

我正在为以下界面编写一个模拟器:

virtual void store(const Foo& container) = 0;

所以在实现中我希望保存每次在向量中发送的内容,如下所示:

virtual void store(const Foo& container)
{
    _storedContainers.push_back(container);
}

_storedContainers应该具有哪种类型,其中_storedContainers是模拟的成员?

2 个答案:

答案 0 :(得分:4)

如果您要const引用Foo,请使用boost::cref()boost::reference_wrapper,因为普通参考不可分配,也不能存储在vector中}:

std::vector<boost::reference_wrapper<const Foo> > _storedContainers;

virtual void store(const Foo& container)
{
    _storedContainers.push_back(boost::cref(container));
}

但是,如果传递给_storedContainers的对象在仍然需要的情况下被破坏,则store()中的元素有可能成为悬空引用。 http://codepad.org/VOokOm6i上的在线演示。

示例(使用cref()reference_wrapper的等效c ++ 11版本)http://ideone.com/0vVv8w

答案 1 :(得分:2)

表达式container的类型为const Foo,因此您尝试将Foo对象推送到_storedContainers。这意味着_storedContainers应该是Foo的容器,例如std::vector<Foo>