我有一个对象集合(目前使用的是 `boost::ptr_vector`),需要传递给几个函数对象。我希望所有函数对象都引用/指向同一个缓存对象 vec,以便每个函数对象都具有相同的数据缓存。我想到了三种方法来实现这一点:
1. 在 `Functor` 的构造函数中传递一个 `boost::ptr_vector&`,并在 `Functor` 类中拥有一个 `boost::ptr_vector&` 成员。 2. 在 `Functor` 的构造函数中传递一个 `boost::ptr_vector*`,并在 `Functor` 类中拥有一个 `boost::ptr_vector*` 成员。 3. 避免使用 `boost::ptr_vector`,直接将数组(`object*`)传递给构造函数。
我尝试过第三种方法,但一直被告知应该使用 vector 而不是原始指针。因此,我尝试了方法 2,但由于指针添加了额外的间接层,导致程序延迟增加。我目前正在使用方法 1,但在函数对象的生命周期内可能需要重新分配缓存(因为数据缓存可能会更改),因此这可能不是一个合适的替代方案。
我不完全理解其中的问题。我猜测函数对象在某个地方被复制了(虽然它们都存储在 ptr_vector 中)。
在我的情况下,哪种方法是最好的?方法 2 太慢(延迟非常关键),至于方法 1,我一次又一次地被建议使用 vector。
非常感谢您提供任何建议。
1. 在 `Functor` 的构造函数中传递一个 `boost::ptr_vector&`,并在 `Functor` 类中拥有一个 `boost::ptr_vector&` 成员。 2. 在 `Functor` 的构造函数中传递一个 `boost::ptr_vector*`,并在 `Functor` 类中拥有一个 `boost::ptr_vector*` 成员。 3. 避免使用 `boost::ptr_vector`,直接将数组(`object*`)传递给构造函数。
我尝试过第三种方法,但一直被告知应该使用 vector 而不是原始指针。因此,我尝试了方法 2,但由于指针添加了额外的间接层,导致程序延迟增加。我目前正在使用方法 1,但在函数对象的生命周期内可能需要重新分配缓存(因为数据缓存可能会更改),因此这可能不是一个合适的替代方案。
我不完全理解其中的问题。我猜测函数对象在某个地方被复制了(虽然它们都存储在 ptr_vector 中)。
在我的情况下,哪种方法是最好的?方法 2 太慢(延迟非常关键),至于方法 1,我一次又一次地被建议使用 vector。
非常感谢您提供任何建议。
*
? - Constantin