如果指针是函数自变量并且通过引用传递值,我应该删除它吗
Should I delete a pointer if it is a function arguemente and is being passed values by reference?
我确信这个问题已经在某个地方得到了答案,如果有,请将我链接到它,但我很难找到这个确切问题的答案。有许多非常接近。以下是我已经读过的一些并不能完全回答我的问题:
通过引用和带指针的值传递C++中通过引用传递指针的原因?对作为函数参数传递的指针使用删除
这是一个基本的情况概述,试图使其非常接近我的实际用法:
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++) {
所以,正如你所看到的,我创建了一个名为data的向量,然后将数据的引用传递给函数。函数通过引用从数据中获取值,对其进行转换,然后通过引用将新值再次保存回数据。
在这个特定场景中,此函数是唯一接收此数据的函数,但它会被重复调用,每次都会传递对相同数据的引用。
我的主要问题是,我应该删除该函数末尾的foo吗?此外,如果我有一个额外的函数也被传递给数据引用,这会改变答案吗?
我读过其他建议小心删除函数中指针的问题,但它们都与最初声明为指针的数据类型有关。我一开始并没有声明指针或引用,只是创建了一个引用作为函数的参数(我认为是?)。
无论如何,我问这个问题的原因是,我的程序有一些严重的内存泄漏。我做了一些研究,读了很多关于指针相关内存泄漏的文章,我突然想到这可能是的一个来源
我试着在一个这样的函数的末尾添加一个"删除",到目前为止一切似乎都很好。。。但我不想添加一大堆删除,然后过了一段时间,我发现这是一个非常糟糕的主意:D
提前干杯,Pete
您必须为每个new
调用delete
(特殊的新放置除外)。
这里没有new
,所以没有delete
。
我应该删除foo吗?
不,你不应该。
此外,您永远不应该使用new
或delete
。而且您永远不会通过指针传递值。
相反,如果您想在函数中更改它,请通过引用(&
)传递它。
正确代码:
void func (vector<int> & foo) {
try {
int bar = foo.at(0);
}
catch (std::out_of_range) {
// here you should process an exception
// when `foo` contains no elements
}
// transform bar
foo.at(0) = bar;
}
int main() {
vector<int> data (4, 0);
data.at(0) = 5;
for (int i = 0; i > 10; i++) {
func(data);
}
}
(注意:循环中可能必须是i < 10
?)
- 我应该删除矢量<short>吗?
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 我应该如何使用remove_if删除两个数字范围内的元素
- 我应该在 v8::外部手动删除指针吗?
- 我应该删除来自其他函数或类方法的指针吗?
- 我应该在使用后删除 QObject 指针吗?
- 我应该使用std ::删除以从列表中删除元素
- C++中的链表析构函数:我应该删除吗?
- 删除从另一个指针分配的指针,我应该再次删除另一个指针吗?
- 我应该采取什么方式使用 qt:all 类继承自 QObject 或删除 新后手动删除
- 我应该删除智能指针的移动构造函数和移动赋值吗
- 如果我写一个新的展示位置?我应该如何编写普通运算符删除
- 我应该删除函数中的本地指针吗?(C++)
- 对于经常创建和删除的游戏对象,我应该使用什么容器
- 我应该删除一个取消引用的指针数组吗?
- 我应该删除.h文件中的字符数组吗
- 如果指针是函数自变量并且通过引用传递值,我应该删除它吗
- 我应该删除类解构器中 int 的指针(在 C++ 中)吗?
- 在这种情况下,我应该删除指针吗?
- 我应该删除传递给函数作为参数的指针吗?