C指向矢量的指针与指向矢量元素的指针

时间:2018-06-26 08:22:54

标签: c++ pointers

关于指向向量的指针的小问题,以找出在这种情况下更有意义的方法(矩阵可能很大):

typedef std::vector<double> Matrix;  

// Pointer to the whole vector
std::unique_ptr<std::vector<Matrix>> _matrices;
// or vec on stack and point to each element
std::vector<std::unique_ptr<Matrix>> _matrices;

是否有明显的区别(除了使用Matrix指针和Matrix引用之外)?

谢谢!

1 个答案:

答案 0 :(得分:4)

向量有一个内部指针,指向它们保存的数据。因此,无论数据多大,都不需要指向向量本身的指针。

例如,如果您需要访问内部指针,则可以这样获取它:

// just for show, don't do this unless you absolutely must
Matrix* matrix = _matrices.data(); 

使用指针向量来利用多态性的主要原因是,但在您的实例中并非如此。否则,引入指针是多余且效率低下的。

我认为向量指针在哪里有意义的唯一可能原因是,您是否需要通过不同的组件共享所有权

在这种情况下,std::shared_ptr可能有意义:

std::shared_ptr<std::vector<Matrix>> shared_matrices;

但是我认为那将是相当罕见的。