我确定这个问题已经在某个地方得到了回答,如果有的话请给我链接,但我正在努力寻找这个确切问题的答案。有很多非常接近。以下是一些我已经阅读过但没有完全回答我的问题的内容:
pass by reference and value with pointers Reason to Pass a Pointer by Reference in C++? Using delete on pointers passed as function arguments
这里是一个基本的情况概述,尽量接近我的实际使用情况:
void func (vector<int>* foo) {
int bar = foo->at(0);
// transform bar
foo->at(0) = bar;
// Should I delete foo?
delete foo;
}
int main() {
vector<int> data (4, 0);
data.at(0) = 5;
for (int i = 0; i > 10; i++) {
func(&data);
}
}
编辑:上面的 for 循环应该是这样的:
for (int i = 0; i < 10; i++) {
因此,如您所见,我创建了一个名为数据的 vector ,然后将数据引用传递给该函数。该函数通过引用从数据中获取一个值,对其进行转换,然后通过引用将新值再次保存回数据。
在这种特定情况下,此函数是唯一接收此数据的函数,但它会被重复调用并每次都传递对相同数据的引用。
我的主要问题是,我应该在那个函数的末尾删除 foo 吗?另外,如果我有一个额外的函数也被传递了对数据的引用,这会改变答案吗?
我读过其他问题建议小心删除函数中的指针,但它们都与首先声明为指针的数据类型有关。我一开始并没有声明指针或引用,只是创建一个引用作为函数的参数(我认为?)。
无论如何我问这个的原因是我的程序有一些严重的内存泄漏。我做了一些研究,并阅读了很多关于指针相关内存泄漏的内容,我发现这可能是它的一个来源
我已经尝试在一个这样的函数的末尾添加一个“删除”,到目前为止一切似乎都很好......但我不想添加一大堆删除,然后在一段时间后找到证明这是一个非常糟糕的主意 :D
提前干杯,皮特
最佳答案
您必须为每个 new
调用 delete
(特殊的 placement new 除外)。
这里,没有new
,所以没有delete
。
关于c++ - 如果指针是一个函数 arguemente 并且正在通过引用传递值,我应该删除它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34402393/