回 帖 发 新 帖 刷新版面

主题:C++ 共享一個類對象的問題

我定義了一個struct Info 結構體.
如果用 list<Info> 的話,
因為我要我要用很多條鏈,即 list<Info> ls[10];
我再向每個 ls 添加一些Info對象,
這些Info對象是有重複的.
我想每條鏈只共享一個相同的 Info.
即如果 ls[0] 與 ls[1] 都有一個相同的對象 Info info;
那麼當我改變 ls[0] 中的 info 時,ls[1]中的 info 也會隨之改變.
但問題是用 list<Info> 在加進去鏈時是用 clone的,
即每個 ls[0]中的info 和ls[1]中的info是不一樣的.

我想過如果改成 list<Info *> 就可以解決這個問題了.
但又會引出另外的問題.
例如 如果 ls[0] 和 ls[1] 都有指向 info對象 的指針,
那麼當 ls[0] 析構了.ls[1] 就不能再訪問 info對象了...
這在C#裏面完全不是個問題...因為C#是自動管理內存的...

那有什麽好的方法,可以實現:
所有的 list 中的所有節點,如果任意兩條鏈有相同的節點,
那這個節點就共享一塊內存,即實際上只有一個節點.

謝謝!!!!!!!!!!!!!!!!!!!!!!!!!
[em2][em2][em2][em2][em2]

回复列表 (共5个回复)

沙发

typedef struct Info
{
....
}*Info_ptr;

板凳

不知道樓上細看了我的說明沒有...
我覺得這樣還是不行吧...
Info* info_p;
Info_ptr info_p;
上面這兩句是沒有區別的...
那麼 list 是要聲明成
list<Info *> ...

3 楼

就是 list<Info*>,或者你自己写个Info代理

“但又會引出另外的問題.例如 如果 ls[0] 和 ls[1] 都有指向 info對象 的指針,那麼當 ls[0] 析構了.ls[1] 就不能再訪問 info對象了”
------ 令人无语

4 楼

[quote]就是 list<Info*>,或者你自己写个Info代理

“但又會引出另外的問題.例如 如果 ls[0] 和 ls[1] 都有指向 info對象 的指針,那麼當 ls[0] 析構了.ls[1] 就不能再訪問 info對象了”
------ 令人无语[/quote]
你說的令人無語是什麽意思呢???
難道不是這樣的嗎??? ls[1] 還可以訪問之前被 ls[0]析構了的對象info???

5 楼

我想到了一個不太好的方法了,就是把所有東西放在一個類裏面,那就可以析構時把所有東西一次刪除了...

我来回复

您尚未登录,请登录后再回复。点此登录或注册