这是释放内存的安全方法吗?

0 c++ memory-management eigen

我有一个名为neuronLayerswhich 类型的成员变量std::vector<Eigen::RowVectorXf*>和另一个名为weightstype的成员变量std::vector<Eigen::MatrixXf*>

作为前向传播函数的一部分,我需要将这两个向量的值相乘,并保留一个指向该值的指针。我已经确保我要相乘的值的维度大小匹配,所以没有问题。

我想出了这个:

for (unsigned i = 1; i < this->topology.size(); i++) {
    delete this->neuronLayers[i];
    this->neuronLayers[i] = new Eigen::RowVectorXf((*this->neuronLayers[i - 1]) * (*this->weights[i - 1]));
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,内存管理是我的一个弱点,所以我可能会遗漏一些非常明显的东西。我只是意识到不小心创建new对象会导致内存泄漏。

当我问这是否安全时,我想知道这是否会导致内存泄漏,或者以某种方式导致其他一些内存错误?如果可以,我如何修改该代码片段以解决此问题?

编辑: neuronLayers在其他地方与其他期望它是Eigen::RowVectorXf*指针向量而不是Eigen::RowVectorXf对象向量的代码一起使用。显示的片段没有显示这一点。

Rem*_*eau 8

更好的选择是根本不使用任何动态分配。您不需要newdelete在这种情况下,只需摆脱指针并在您的vectors 中保存实际对象,例如:

std::vector<Eigen::RowVectorXf> neuronLayers;
std::vector<Eigen::MatrixXf> weights;
...
for (unsigned i = 1; i < topology.size(); i++) {
    neuronLayers[i] = Eigen::RowVectorXf(neuronLayers[i - 1] * weights[i - 1]);
}
Run Code Online (Sandbox Code Playgroud)