簡體   English   中英

C ++通過引用傳遞對象?

[英]C++ Passing an object by reference?

我有一個代表游戲中占領區的類。 在此類的內部,我有一個捕獲該區域的玩家矢量(CUtlVector是我使用的SDK中的矢量類)

typedef CUtlVector<ConquestPlayer*> CappingPlayersType; (defined outside of class)
CappingPlayersType CapturePlayers;

在我的GameManager類中,我試圖使用此代碼來檢索玩家捕獲的列表。

void GameManager::UpdateCaptureData()
{
    // Loop Active Capture Points
    for(int i = 0; i < CaptureZones.Count(); i++)
    {
        // Get List of Active Players Capturing this Point
        CappingPlayersType *CapturePlayers = NULL;
        int CapPlayersCount = CaptureZones.Element(i)->GetPlayersCapturing(CapturePlayers);


int CTriggerCaptureZone::GetPlayersCapturing(CappingPlayersType &CapPlayers)
{
    CapPlayers = CapturePlayers;

    return CapturePlayers.Count();
}

但是已經有一段時間了,我不記得從函數中檢索列表並將其存儲在局部變量中的最佳方法。 IIRC我不能通過引用傳遞,因為CapturePlayers對象為NULL,但是我很茫然。 任何幫助將非常感激。

如果我理解正確,則您希望傳入CapturePlayers,並讓GetPlayersCapturing對其進行初始化。

您有兩種選擇:

  1. 您可以使CapturePlayers成為指針,並在GetPlayersCapturing中將其接受為指針。 您將其設置為NULL,將其傳入,GetPlayersCapturing將為其分配內存/對其進行初始化。

  2. 您可以將CapturePlayers聲明為本地變量,如下所示:

     CappingPlayersType CapturePlayers; 

    然后,您可以在GetPlayersCapturing中接受它作為參考,它將在返回計數之前對其進行修改。

最終,選擇哪種方法取決於您自己,並且取決於比此處顯示的更多上下文。 但是,我強烈建議您選擇選項2,僅因為您應盡可能避免處理指針。

你的意思是這樣嗎?

const CappingPlayersType& CTriggerCaptureZone::GetPlayersCapturing() const
{
    return CapturePlayers;
}

並在調用函數中:

const CappingPlayersType& CapturePlayers = CaptureZones.Element(i)->GetPlayersCapturing();
size_t CapPlayersCount = CapturePlayers.size();

我對代碼的其余部分並不太仔細(只是試圖適應您所擁有的內容),但是似乎您可能只是想通過const引用返回內部CUtlVector

我不知道在GetPlayersCapturing()調用之后您在做什么,但是我認為通過返回計數和對真實數據的引用來重載一個調用只會使您不滿意,除非您想使用原始指針。

為什么沒有一個函數返回計數,一個函數返回引用,然后又一個調用它們呢? 無需傳遞錯誤數據,進行預初始化或在其上浪費更多時間。

暫無
暫無

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

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