[英]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.