簡體   English   中英

從C ++中的成員函數返回指針

[英]Returning a pointer from a member function in C++

您好,我有一個帶有返回指針的函數的類:

int* Maze::GetStart()
{
    int startNode = 1;

    return &startNode;
}

函數返回指針后,是否會刪除startNode的值?

如果我這樣做了,將保存該值嗎?

int Maze::GetStart()
{
    int startNode = 1;

    return startNode ;
}

main
{
    int* pStart = maze.GetStart();
}

函數返回指針后,是否會刪除startNode的值?

一旦函數GetStart()返回,變量startNode將不再存在,因此從某種意義上說是的。

但是 ,通過將地址返回到GetStart()返回時將消失的東西,您的代碼為未定義的行為提供了巨大的機會。 如果調用方嘗試取消對返回的node*引用,則可能發生任何事情。 另外,由於您無法將int*隱式轉換為node* ,因此代碼可能無法原樣編譯。

但是,如果按值返回,則應該沒問題:

int Maze::GetStart() 
{ 
    int startNode = 1; 
    return startNode; 
    // return 1; // Why not do this?
} 

int pStart = maze.GetStart(); // Get returned value as int, not pointer to int. 

在堆棧上分配的變量的返回地址根本沒有意義。 一旦函數GetStart()返回,變量startNode的生命周期就會結束。 它是自由函數還是成員函數都沒有關系。

我認為,在gcc / g ++中對此有警告。

根據問題編輯:

如果要修改變量並保存修改后的狀態,則必須將其聲明為static 請參閱靜態局部變量

暫無
暫無

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

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