c++ - 如果指针是一个函数 arguemente 并且正在通过引用传递值,我应该删除它吗?

标签 c++ pointers pass-by-reference

我确定这个问题已经在某个地方得到了回答,如果有的话请给我链接,但我正在努力寻找这个确切问题的答案。有很多非常接近。以下是一些我已经阅读过但没有完全回答我的问题的内容:

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/

相关文章:

c++ - 将函数指针作为非类型模板参数传递

c++ - 迁移 C-->C++ 指向函数的指针会引发编译器错误

c++ - 为什么允许在 C++ 中使用指向 const 的指针来释放内存?

python numpy 和内存效率(按引用传递与值传递)

python - Cython:通过引用传递

c++ - C 中的多维数组

c++ - boost::variant 单一存储保证

c - C 中带指针和结构的链表

iphone - 在 objective-c 中保留按值传递的变量是否可以?

c++ - 类的前向声明/不完整类型的无效使用