gpt4 book ai didi

c++ - 引用结构中的C++内存管理

转载 作者:行者123 更新时间:2023-12-02 09:51:44 25 4
gpt4 key购买 nike

我是C++的新手,试图了解需要做些什么(如果有的话)以安全地释放在引用结构中分配的内存。这是一个简化的示例:

#include <RcppArmadillo.h>

typedef struct dist {
const arma::colvec& mu;
const arma::mat& Sigma;
dist(const arma::colvec& mu, const arma::mat& Sigma): mu(mu), Sigma(Sigma) {};
} dist;

arma::mat test_struct(const arma::vec& my_vector, const::arma& my_matrix, const int iter = 1000) {
for (int i = 0; i < iter; i++) {
dist d(my_vector, my_matrix);
// Some other things here
}
// Some other things here
}
test_struct函数的for循环中,我知道每个结构在创建并释放的迭代结束时都超出范围,但是对于Armadillo库中对对象的引用需要做些什么呢?是否会自动调用两个引用对象的析构函数,还是我需要做其他事情以防止内存泄漏?还是我需要在结构中提供析构函数?
感谢所有帮助!

最佳答案

I'm new to C++ and trying to understand what (if anything) needs to be done to safely free the memory allocated in a struct of references.


根本没有,因为没有动态分配内存,所以没有任何可用空间。

In the for loop of the test_struct function, I understand that each struct goes out of scope at the end of the iteration in which it was created and is freed


正确。每次循环迭代都会创建并销毁该结构的新实例。

what needs to be done about the references to objects from the Armadillo library?


没事

Are the destructors for the two referenced objects automatically called


不,因为它们不是在这里构造的,所以不需要在这里破坏它们。引用只是现有对象的别名。您不会仅仅因为引用了对象就销毁了它。仅当不再使用该对象时,才销毁该对象。在自动存储中创建的对象在超出范围时会被自动销毁。只有在明确要求销毁动态存储中创建的对象(例如通过调用 delete)时,该对象才会被销毁。

do I need to do something else to prevent a memory leak?


此代码中没有内存泄漏。

do I need to provide a destructor in the struct?


没有。

关于c++ - 引用结构中的C++内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64016500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com