我有下面的课程
struct Images {
std::vector< std::shared_ptr<byte[]> > ptr_vector;
}将ptr_vector放在std::shared_ptr中是不是在复制Images时更有效率?即做Images A; Images B = A;
struct Images {
std::shared_ptr< std::vector<std::shared_ptr<byte[]>> > vector_ptr;
}这里只执行一次,而不是复制向量并递增多个shared_ptr引用计数。
这种方法有什么问题/限制吗?
发布于 2013-05-03 06:41:36
是的,如果您必须仅复制指针,则复制效率更高。
限制是使用任何指针,您可以共享公共数据。当您修改一个struct Images时,另一个也会被修改。
如果您想要共享数据,还可以考虑使用std::shared_ptr<Images>
struct Images {
std::vector< std::shared_ptr<byte[]> > ptr_vector;
};
std::shared_ptr<Images> images1, images2;这也将避免复制大型数据集。
发布于 2013-05-03 06:45:25
你的建议是:
ptr_vector;您将获得一个可以独立于原始矢量进行更改的新矢量。ptr_vector包装在另一个共享指针中并复制该指针;您将获得原始矢量的别名。如果您的目的是创建别名,则使用选项2。如果您的目的是创建副本,请使用选项1。
找出其中哪一个是你想要的,然后去做--很快做错了事情是没有效率的。
https://stackoverflow.com/questions/16348870
复制相似问题