C ++:成员引用还是指针?

时间:2012-11-14 16:00:41

标签: c++ arrays pointers reference ptr-vector

我有一个对象(当前boost::ptr_vector)的对象(让我们称之为vec)需要传递给一些仿函数。我希望所有的仿函数都有一个引用/指针指向同一个vec,它本质上是一个缓存,这样每个仿函数都有相同的数据缓存。我有三种方法可以考虑这样做:

  1. boost::ptr_vector<object>&传递给Functor的构造函数并在Functor类中拥有boost::ptr_vector<object>&成员

  2. boost::ptr_vector<object>*传递给Functor的构造函数并在Functor类中拥有boost::ptr_vector<object>*成员

  3. 避免使用boost::ptr_vector并直接将数组(object*)传递给构造函数

  4. 我曾尝试使用方法3,但不断被告知我应该使用向量而不是原始指针。所以,我尝试了方法2,但由于指针添加了额外的间接级别,这增加了我程序的延迟。我目前正在使用方法1,但是我可能需要在仿函数的生命周期内重新分配缓存(因为数据缓存可能会发生变化),所以这可能不是一个合适的选择。

    我不完全明白。我假设仿函数被复制的方式(尽管这些都存储在ptr_vector中)。

    方法3对我的情况最好吗?方法2太慢(延迟非常关键),对于方法1,我一次又一次地建议使用向量。

    非常感谢任何建议

1 个答案:

答案 0 :(得分:2)

C ++中的引用只能初始化('绑定')到变量。

在此之后, 的引用可以在其生命周期内“重新设置”(使引用到另一个变量)。< / p>

这就是为什么可以设想生成默认的复制构造函数,但绝不会生成赋值运算符,因为这需要引用“更改”。

我推荐的方法是使用智能指针而不是引用。

  • std :: unique_ptr(最简单,负责分配/解除分配)
  • std :: shared_ptr(更多参与,允许共享所有权)

在这种情况下:

std::shared_ptr<boost::ptr_vector<object> > m_coll;

似乎很合适