这很可能是我试图做的是糟糕的练习。如果是这样,请告诉我,我可以停止。无论如何,我正在使用动态内存来存储矩阵数据数组,从事一些基本的矩阵数学函数。我想弄清楚如何将传递给构造函数的矢量转换为这个数组,但是我得到了一些奇怪的结果。这是简单的版本。使用矢量构造函数分配动态内存
页眉:
class Matrix {
public:
unsigned int size = 4;
float *M;
Matrix(std::vector<float> values) : M(&values[0]){}
~Matrix() = default;
};
而且测试文件:
int main(){
Matrix m(std::vector<float>{ 0.0f, 0.0f, 0.0f, 1.0f,
1.0f, 2.0f, 3.0f, 4.0f,
5.0f, 6.0f, 7.0f, 8.0f,
9.0f, 10.0f, 11.0f, 12.0f });
return 0;
}
结果是...错了。看起来一切正常(从调试时观察值)直到从构造函数返回。我的猜测是Visual Studio的调试器对我说谎,但它早于此发生。
因此,除了尺寸没有改变的事实之外,发生了什么?有一个更好的方法吗?另外,是否有可能接受std :: initializer_list并将该数据提供给动态指针?
我会补充说,一旦你修改参数来引用,你将会把你的指针var M指向向量的内部存储器。那里的任何改变都会搞砸向量。此外,请注意,该矢量可能携带额外的内存(它分配的内存超过动态增长所需的内存)。 –
所有的真实。尽管我不想让OP有太多的细节超载。问题的实质是他/她持有暂时的指示。 – bstamour
谢谢你,超级快!不幸的是,我试图做你已经建议和标准:复制有一些安全问题。没有足够的确定它的用法来确定什么是错的。 但是,我一定会研究这些指针(heh)。你会说在数组上使用向量会带来很多矩阵的显着性能下降吗? –