簡體   English   中英

如何給指針賦值?

[英]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_ptrstd::shared_ptr

我認為您正在按值傳遞項目,這就是為什么嘗試通過引用傳遞它

我究竟做錯了什么?

您似乎假設使用名稱item (參數)分配一個變量會影響名稱為item的另一個變量( main中的那個)。 但由於它們是不同的對象,所以這種假設是錯誤的。

為了修改 function 之外的非全局對象,必須使用間接 只需將參數更改為引用(這是一種間接形式),它就會按照您的預期運行。 另一種選擇是返回值並在main中分配返回的值。

PS 避免使用裸擁有的指針。 您的示例泄漏 memory。

暫無
暫無

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

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