我有一个对象(当前boost::ptr_vector
)的对象(让我们称之为vec)需要传递给一些仿函数。我希望所有的仿函数都有一个引用/指针指向同一个vec,它本质上是一个缓存,这样每个仿函数都有相同的数据缓存。我有三种方法可以考虑这样做:
将boost::ptr_vector<object>&
传递给Functor
的构造函数并在Functor类中拥有boost::ptr_vector<object>&
成员
将boost::ptr_vector<object>*
传递给Functor的构造函数并在Functor类中拥有boost::ptr_vector<object>*
成员
避免使用boost::ptr_vector
并直接将数组(object*
)传递给构造函数
我曾尝试使用方法3,但不断被告知我应该使用向量而不是原始指针。所以,我尝试了方法2,但由于指针添加了额外的间接级别,这增加了我程序的延迟。我目前正在使用方法1,但是我可能需要在仿函数的生命周期内重新分配缓存(因为数据缓存可能会发生变化),所以这可能不是一个合适的选择。
我不完全明白。我假设仿函数被复制的方式(尽管这些都存储在ptr_vector中)。
方法3对我的情况最好吗?方法2太慢(延迟非常关键),对于方法1,我一次又一次地建议使用向量。
非常感谢任何建议
答案 0 :(得分:2)
C ++中的引用只能初始化('绑定')到变量。
在此之后, 不 的引用可以在其生命周期内“重新设置”(使将引用到另一个变量)。< / p>
这就是为什么可以设想生成默认的复制构造函数,但绝不会生成赋值运算符,因为这需要引用“更改”。
我推荐的方法是使用智能指针而不是引用。
在这种情况下:
std::shared_ptr<boost::ptr_vector<object> > m_coll;
似乎很合适