[英]How to assign value to pointer?
我需要為指針賦值,這是一個例子:
void foo(BaseClass * item)
{
BaseClass * tmp = new Child();
item = tmp;
}
int main()
{
BaseClass * item = nullptr;
foo(item);
getchar();
return 0;
}
我希望在調用foo()
之后,應該分配item
,但它沒有
我究竟做錯了什么?
item
被聲明為按值傳遞。 它是參數的副本,對它的任何修改(指針本身)都與原始參數( main()
中的item
)無關。
您可能需要通過引用。
void foo(BaseClass *& item)
{
BaseClass * tmp = new Child();
item = tmp;
}
PS:最后別忘了delete
指針。
您正在將指針item
的副本從main
傳遞到foo
中的不同指針變量item
。 對foo
中的item
的任何更改只涉及它的 this 指針的本地副本。 你在這里需要的(如果你真的需要這個)是一個指向指針的指針:
void foo(BaseClass** item)
{
*item = new Child();
}
int main()
{
BaseClass* item = nullptr;
foo(&item);
getchar();
return 0;
}
您可能還想使用對指針的引用,但更難遵循:) - 請參閱其他答案。
另請注意以下幾點:
new Child
最終需要刪除 - 否則您有 memory 泄漏foo
創建了一個 object,但隨后將其放棄並且不再關心它的刪除)std::unique_ptr
和std::shared_ptr
)我認為您正在按值傳遞項目,這就是為什么嘗試通過引用傳遞它
我究竟做錯了什么?
您似乎假設使用名稱item
(參數)分配一個變量會影響名稱為item
的另一個變量( main
中的那個)。 但由於它們是不同的對象,所以這種假設是錯誤的。
為了修改 function 之外的非全局對象,必須使用間接。 只需將參數更改為引用(這是一種間接形式),它就會按照您的預期運行。 另一種選擇是返回值並在main
中分配返回的值。
PS 避免使用裸擁有的指針。 您的示例泄漏 memory。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.