2011-09-21 50 views
2

我使用boost :: shared_ptr來存儲指向紋理的指針。我按照需要加載新紋理,並使用shared_ptr在程序中共享它們。如果我的應用程序使用的內存太多,我想刪除未使用的紋理來清除內存。有沒有一種方法可以確定有多少物體通過shared_ptr訪問紋理?boost shared_ptr獲取擁有者數量

回答

6

如果未使用,則shared_ptr將自動釋放它。這是shared_ptr的一點。如果您在沒有真正使用紋理的情況下將shared_ptr保留爲紋理,那麼您違反了shared_ptr的合同,因此不應使用它。

+0

所有紋理都由ResourceManager通過shared_ptr保存。該程序的其他任何部分都可以通過該經理訪問紋理。我不想刪除紋理,直到我收到內存警告。在這種情況下,我想刪除未使用的紋理(僅由資源管理器保存) – Andrew

+0

@Andrew:你看過boost.weak_ptr還是boost.intrusive_ptr? – PlasmaHH

+1

@Andrew:放棄ResourceManager並離開'shared_ptr'來處理它會更容易。 – Puppy

1

use_count(),但請注意,正如文檔所述,它不一定是太高效。

1

shared_ptr類具有成員函數use_count()unique()可讓您訪問其使用計數。

這是一個不同的問題,儘管如此,這些信息將對您有用。

相關問題