2011-11-01 34 views
0

數據成員如何使一個指針例如以C++/CLI 數據成員指針在C++/CLI

ref class team 
{ 
    List<teamMember^> members; 
    teamMember^ leader;  //the aim is to make it a pointer to an element in the list 
    void changeLeader(teamMember^% member) //member is an element from members 
    { 
    leader=member; //doesn't reference and %member gave an error 
    } 
}; 
+2

這與垃圾收集器非常不兼容,它在壓縮堆時移動對象,從而使指針失效。使用參考並避免鎖定。發佈的代碼在您刪除%時正常工作。 –

+0

@ user746277:你在這裏的用例是什麼?爲什麼列表中某個元素的句柄不夠用? – ildjarn

+0

@HansPassant:只有使用本地指針('*')或本機引用('&')時,它纔會不兼容。跟蹤句柄('^')和跟蹤參考('%')都可以和gc一起玩。 –

回答

1

在C++/CLI 手柄(^)是analoguos天然指針。 此代碼將起作用。

ref class teamMember 
{ 
    public bool isLeader; 
}; 

ref class team 
{ 
    List<teamMember^> members; 
    teamMember^ leader;  
    void changeLeader(teamMember^ member) 
    { 
    if(leader != nullptr) 
     leader.isLeader = false; 
    leader = member; 
    leader.isLeader = false; 
    } 
}; 

看看thisthis獲取更多信息。

+2

C++/CLI中有成員指針 - ['interior_ptr <>'](http://msdn.microsoft.com/en-us/library/y0fh545k.aspx) – ildjarn

+0

@ildjarn:該死!完全忘了它。謝謝。 –