删除return语句后的指针
Delete pointer after return statement
我遇到了以下问题:我想返回一个Y坐标,返回后需要删除它。
有没有办法做到这一点,因为我想我错过了一些重要的事情。
void setY(int y)
{
this->y = new(int); //pointing to new address
*this->y = y; //change value of pointer
}
int getY()
{
return *y; //give the coordinate
delete y; //what I want
*y = NULL; //what I want
}
提前谢谢。如果问题描述不好,请告诉我。
只需将数据成员类型从jint*
更改为普通int
即可。
然后将值存储在那里,并返回值,不返回new
内容。
附加提示:get
前缀在Java或C#等具有内省功能的语言中很有用,但在C++中不是必需的(只是措辞)。
尽管存在设计缺陷,但最简单的方法是复制:
int getY()
{
int ret = *y;
delete y; //what I want
/*No assignment to deferenced y is possible - you've deleted it*/
y = nullptr; /*a further delete on y will be benign*/
return ret;
}
因为你说你确实需要在学习练习中摆弄指针,所以在删除之前需要读取返回值:
int result = *y;
delete y;
y = nullptr; // NOT *y - that's been deleted
return result;
(如果你一直使用C++的历史版本,那么写NULL
或0
而不是nullptr
。不过nullptr
更好——它可以防止代码中的错误)。
您还应该在取消引用y
之前检查它,并修复多次调用setY
时出现的内存泄漏。由于该类管理一个单独的资源,您还需要仔细遵循"三条规则",以避免进一步的内存错误。
希望本练习的重点是向您展示指针杂耍有多困难,以及使用更惯用的技术有多容易——在本例中,只需直接存储int
。
类似的东西
int getY()
{
int value = -1;
if (y_ptr) {
value = *y_ptr;
y_ptr = nullptr;
}
return value;
}
然而,我必须补充一点,这只是指针的滥用,不要这样做。
相关文章:
- C++ typedef 函数指针,并在一个语句中声明一个指针
- 为什么 cout 语句在传递指向函数的指针时没有执行?
- 使用 if (? 运算符) 语句传递带有指针的数组
- 返回指针的语句 - 解释它是如何工作的以及为什么
- 将 OR 放入 if 语句会导致 ISO C++禁止指针和整数之间的比较(f 允许)
- 在其声明的同一语句中使用指针
- C++:如何在 if 语句条件中使用指针
- 是否可以使用指向语句中声明的变量地址的指针"if"
- 如何访问在 if 语句内、外部创建的指针
- 指针变量在遇到断裂语句时重新初始化
- 检查指针是否为null,然后在同一if语句中取消引用它,这样安全吗
- 如何编写涉及指针/向量的 if 语句
- 什么是成员数据指针的正确赋值语句
- C#指针:错误CS0254:固定语句赋值的右侧可能不是强制转换表达式
- 添加printf语句时,NULL指针异常消失
- 创建指向while语句中的指针的指针
- 使用函数指针剪切 if 语句会更有效
- 带有 if 语句的指针(地址)
- 在单个语句中将类类型分配给该类的取消引用指针时执行哪些操作
- C++:将'this'指针与"get"函数一起使用以替换 cout 语句的可能性