0
我想構建一個cli/C++ ref類。這個類的目的是用一些功能包裝一個本地類指針。本地類指針由黑盒工廠方法提供給我。對於我的生活,我不知道如何固定原生指針,所以它不會移動。這裏是代碼的情況下(這麼說):問題與interior_ptr pin_ptr
public ref class ManagedFoo{
private:
NativeFooClass* myFoo;
public:
ManagedFoo(){
NativeFooFactory factory();
NativeFooClass* nativePtr = factory.CreateFoo();
//here is where i get lost
//create a pined pointer to the nativePtr
pin_ptr<NativeFooClass*> pinPtr = &nativePtr;
//tring to assign pinPtr to the mamaber var= compilation faliuer
myFoo = pinPtr;
}
}
我不斷收到: 錯誤C2440: '=':無法從 'cli的:: pin_ptr' 到 'NativeFooClass *'
我轉換認爲編譯器對待它們是一樣的嗎?我需要靜態投射嗎?這似乎不正確?
我試圖固定這個指針的原因是因爲當我嘗試在一個方法中使用它,然後從C#中調用此方法時,出現AccessViolation運行時錯誤「{」試圖讀取或寫入受保護的內存。這通常表示其他內存已損壞。「}」
我的印象是,當我在不同的方法中使用本機ptr時,我需要pin bc我得到運行時間內存錯誤: 「嘗試讀取或寫入受保護的內存,這通常表示其他內存是腐敗。」 – Dmitry
@Dmitry:那麼你需要看看對象的生命週期,而不是釘住。對象是否允許比創建它們的工廠壽命更長?現在工廠立即超出範圍。 –
本·你是對的!工廠的使用壽命影響指針的使用壽命。 – Dmitry