簡體   English   中英

在 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
    }

先感謝您。 如果問題沒有很好地描述,請告訴我。

只需將您的數據成員類型從 j int*更改為普通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++ 的歷史版本,那么寫NULL0而不是nullptr 。但nullptr更好 - 它可以防止代碼中的錯誤)。

您還應該在取消引用之前檢查y ,並修復多次調用setY時出現的內存泄漏。 由於該類管理一個單獨的資源,您還需要仔細遵循三原則以避免進一步的內存錯誤。

希望這個練習的重點是向您展示指針雜耍有多么困難,以及使用更多慣用技術有多容易 - 在這種情況下,只需直接存儲一個int

像這樣的東西

int getY()
{
   int value = -1;

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

   return value;
}

但是我必須補充一點,這只是濫用指針,不要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM