2015-11-02 28 views
3

究竟是什麼可能是一個簡單的問題,但是,一邊看着在Android所有例子的代碼,我注意到vtkSmartPointer<>沒有在例子中使用的。這有什麼特別的理由嗎?我有點習慣現在使用它們,我想知道它們的使用是否會導致一些問題?vtkSmartPointer與Android

例如,這一點在VolumeRenderer使用struct

struct userData 
{ 
    vtkRenderWindow *RenderWindow; 
    vtkRenderer *Renderer; 
    vtkAndroidRenderWindowInteractor *Interactor; 
}; 

我只是試圖只用smartpointers重新實現這個例子中,我沒有遇到任何問題,到目前爲止,但我想知道如果這是不是一個好主意。 所以這是我有完全相同的結構:提前

struct userData 
{ 
    vtkSmartPointer<vtkRenderWindow> RenderWindow; 
    vtkSmartPointer<vtkRenderer> Renderer; 
    vtkSmartPointer<vtkAndroidRenderWindowInteractor> Interactor; 
}; 

感謝。

+0

關於Android NDK不知道,但通常它的事項誰擁有指針。你確定userData是這裏的最終主人嗎? – SergeyA

+0

不,我不確定是否誠實。剛開始深入代碼,我仍然是一個初學者與VTK和NDK。但是,就最佳實踐而言,我認爲這將是一個很好的問題。特別是隨着NDK,處理段錯誤和內存管理問題是在***所以只是想知道,如果它可以是任何問題 – LBes

+0

的源的痛苦看起來像你之前,你可以根據需要更好地瞭解++一般用C指針研究一個paritucar NDK。我建議你熟悉內存管理的一般原則。就像我說的,重要的是誰擁有指針。 – SergeyA

回答

3

應該有所有在你的Android(或iOS)應用程序中使用vtkNew和/或vtkSmartPointer沒有問題。在這種情況下vtkNew看起來更合適,並保持強烈的主人翁意識,如果你需要在外部設置這些成員出於某種原因,然後vtkSmartPointer將要走的路。

欲瞭解更多有關該指針類是合適的,我會建議採取看看這個Source article

+0

不知道指針的所有權(和OP聲稱沒有知識),你的建議是一個反建議。 – SergeyA

+0

我認爲這超出了問題的範圍,當然你需要弄清楚所有權。事實上,VTK中的智能指針類按照Android NDK的預期工作,並且通常優於原始指針。 –

+0

@SergeyA我認爲馬庫斯完美地回答了我的問題。我想知道VTK對於Android的優先選擇,我不是在談論我們理解的所有權方面的理論差異。謝謝Marcus。 – LBes

2

這主要取決於用戶數據的使用情況。使用vtkSmartPointer會增加ref計數器,因此只要userData有效,您也可以使用其他指針。但是,在這種情況下,您正在存儲對渲染窗口對象的引用,因爲在這種情況下您想考慮使用vtkWeakPointer,因此可能會消失一些外部事件。