簡體   English   中英

動態或靜態分配復雜數據成員更好?

[英]Better for complex data members to be dynamically or statically allocated?

我正在考慮一個問題,不能得出兩個選擇的最終“更好”選擇。 歸結為決定一個復雜的數據成員(即不是原語)應該是一個指針還是一個值。 (請注意,我已經看到許多關於數據成員的指針與引用的問題,但是關於指針與值的問題卻一無所獲)

  1. 數據成員的壽命(無論它是否擁有所有者的全部生命)。
  2. 如果它確實可以使用整個壽命,則可以減少內存碎片。

考慮以下代碼:

class PlayerStatistic
{
    int m_MaxValue;
    int m_CurrentValue;
    // And many other things that round out a player statistic
}

class PlayerStatisticManager
{
    //While in this case, it may be better to store stats as a list of some kind and
    //identify them by a StatId or something, for this example, I'm declaring them 
    //individually.
    PlayerStatistic* m_pHealth;
    //OR
    PlayerStatistic m_Health;

    // And many more statistics.
}

在上面的示例中,每個玩家始終健康。 他們的健康統計信息始終是StatisticManager的生命周期,而后者又總是玩家的生命周期。

如果不是這種情況,我希望使用指針,以便NULL可以指示該對象不存在(這對於並非所有玩家都擁有的統計數據可能更好)。

但是,因為不是這種情況,我我寧願將其存儲為值,以便減少較大的內存分配,而不是許多小的內存分配。

是我的思考聲音,還是我沒有考慮的事情?

編輯-我選擇的單詞(“指針與價值”)很差。 我的意思是答案之一得到澄清:

您在這里指的是天氣,最好靜態地或動態地分配mHealth

而且,在這種情況下,我知道健康的壽命就是玩家的壽命,所以我的問題基本上歸結為記憶。 為了減少分配而靜態分配數據成員,而是進行一次大分配(當Player更新時),是否是更好的內存管理。

我認為您有些困惑:“按引用”或“按值”是指如何將參數傳遞給函數。 首選按指針或按值,因為在這種情況下,僅傳遞指向存儲位置的指針; 例如,對於結構,所有成員都被復制到堆棧中-增加了開銷。

您在這里指的是天氣,最好靜態地或動態地分配mHealth 這是一個設計問題,取決於應用程序。 兩種方法都很好-但是沒有最終更好的解決方案-這取決於...

您需要考慮的一件事是如何使用數據。 在大多數過程中,是需要通過各種例程來更改它,還是需要對其進行簡單監視。

如果確實需要更改它並將更改公開給其他例程,則最好通過引用傳遞它,在這種情況下,指針將是一個更好的解決方案。

另一方面,如果要監視的是一個簡單的值並且不經常更改,我建議按值傳遞,尤其是監視不經常發生。

在您的情況下,以下是我的分析:1.如果發生類似戰斗的事件,玩家的健康狀況可能會經常變化。 在這種情況下,最好通過引用傳遞數據。 2.當不在戰斗中時(例如,當用戶查詢健康值時),很少通過幾個進程監視玩家的健康狀況。 在這種情況下,最好按值傳遞數據,因此意外更改值不會影響對象實例本身。

就個人而言,我會在PlayerStaticManager中使用指針。 這提供了在不同情況下傳遞值或引用的選項。 如果需要按引用傳遞,則將指針傳遞給。 如果需要按值傳遞,請復制內容,將其傳遞,然后忽略該副本。

希望這可以幫助。

如果成員的生存期與包含對象的生存期不同,則僅使用指針。

暫無
暫無

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

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