返回语句后删除指针

时间:2014-04-23 09:59:08

标签: c++ pointers

我遇到了以下问题:我想返回一个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
    }

提前谢谢你。如果问题没有得到很好的描述,请告诉我。

4 个答案:

答案 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 ++的历史版本,那么请写NULL0而不是nullptrnullptr更好 - 但是防止你的代码中的错误。)

在解除引用之前,您还应该检查y,并修复多次调用setY时获得的内存泄漏。由于该类正在管理单独的资源,因此您还需要仔细遵循Rule of Three以避免进一步的内存错误。

希望本练习的目的是向您展示指针杂耍的难度,以及使用更多惯用技术的难易程度 - 在这种情况下,只需直接存储int

答案 3 :(得分:0)

像这样的东西

int getY()
{
   int value = -1;

   if (y_ptr) {
      value = *y_ptr;
      y_ptr = nullptr;
   }

   return value;
}

但是我必须补充一点,这只是对指针的滥用,不要这样做。