我有一个扩展的图像处理项目,它在很大程度上依赖于OpenCV库的大部分功能,尽管我也使用了一些Boost功能。
我想开始使用智能指针来替换一些开始引起问题的原始指针。我的问题是要使用哪种类型的智能指针,而我的主要选择(我认为)是OpenCV cv::Ptr
或Boost变体之一。
我意识到有许多问题可以解释每个提升指针之间的不同,但是我希望有人可以解释cv::Ptr
与它们进行比较并提出任何一个或另一个建议的建议?
编辑 - 我从OpenCV文档中注意到Ptr
类似于BOOST shared_ptr
,是否需要哪个库/Include Files?
对于我在OpenCV文档中可以看到的内容,这是一个参考分数的智能指针,本质上与boost::shared_ptr
相同。即使是在参考计数上使用原子操作。
我将根据可移植性和互操作性做出选择。
-
您的系统是否会在其他地方移植,并且肯定取决于OpenCV,而不是
boost
?然后,坚持使用OpenCVcv::Ptr
,如果您可以避免提升并摆脱依赖性。 -
boost::shared_ptr
在OpenCV的其余部分中效果很好吗?如果您从OpENCV库中返回CV :: PTR,那么在这些情况下,最好坚持使用CV :: PTR,因为如果您混合了类型的指针,并且资源可能会过早地破坏,则参考计数将不正确地处理。。 -
无论您在哪里移植该项目,您都会坚持使用
boost
?然后,坚持使用boost::shared_ptr
,当您可以做到这一点时,它是标准的,人们知道它并立即理解您的代码。更新:在C 11中,您有std :: shared_ptr,如果您负担得起,则无关,因此您可以在这种情况下使用std :: shared_ptr并摆脱boost。
作为旁注,有一种将Boost和STD共享指针混合的技术,可以正确保留参考,并且对某人可能很有用。请参阅此问题,这也可能与混合其他类型的参考调节指针:从boost :: shared_ptr转换为std :: shared_ptr?
根据我的经验,当您移植某些东西时,依赖性越少,或者在某些平台上汇编可能会成为一个地狱。因此,如果指针与库的关注和互操作性,请根据便携性做出选择。