我有以下课程
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引用计数,这里只执行一次。
这种方法有任何问题/限制吗?
答案 0 :(得分:3)
是的,如果您必须仅复制指针,则复制效率会更高。
限制是使用任何指针,您共享公共数据。当您修改一个struct Images
时,另一个也会被修改。
如果您想共享数据,您还可以考虑使用std::shared_ptr<Images>
struct Images {
std::vector< std::shared_ptr<byte[]> > ptr_vector;
};
std::shared_ptr<Images> images1, images2;
这样可以避免复制大型数据集。
答案 1 :(得分:2)
您的建议是:
复制ptr_vector
;你得到一个新的矢量,可以独立于原来的变化。
将ptr_vector
换行到另一个共享指针并复制它;你得到原始载体的别名。
如果您的目的是创建一个别名,那么请使用选项2.如果您打算创建一个副本,请选择选项1.
弄清楚哪些是你想要的并做到这一点 - 快速做错事并不高效。