我遇到了以下问题:我想返回一个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
}
提前谢谢你。如果问题没有得到很好的描述,请告诉我。
答案 0 :(得分:3)
只需将您的数据成员类型从j int*
更改为普通int
。
然后将值存储在那里,并返回值,没有new
个东西。
附加提示:get
前缀在具有内省(如Java或C#)的语言中很有用,但在C ++中不是必需的(只是措辞)。
答案 1 :(得分:3)
尽管存在设计缺陷,但最简单的方法是复制一份:
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;
}
答案 2 :(得分:2)
因为你说你确实需要在学习练习中使用指针,所以你需要在删除之前阅读返回值:
int result = *y;
delete y;
y = nullptr; // NOT *y - that's been deleted
return result;
(如果您仍然坚持使用C ++的历史版本,那么请写NULL
或0
而不是nullptr
。nullptr
更好 - 但是防止你的代码中的错误。)
在解除引用之前,您还应该检查y
,并修复多次调用setY
时获得的内存泄漏。由于该类正在管理单独的资源,因此您还需要仔细遵循Rule of Three以避免进一步的内存错误。
希望本练习的目的是向您展示指针杂耍的难度,以及使用更多惯用技术的难易程度 - 在这种情况下,只需直接存储int
。
答案 3 :(得分:0)
像这样的东西
int getY()
{
int value = -1;
if (y_ptr) {
value = *y_ptr;
y_ptr = nullptr;
}
return value;
}
但是我必须补充一点,这只是对指针的滥用,不要这样做。