这可能是一个简单的问题但是,在查看Android上所有示例的代码时,我注意到示例中根本没有使用vtkSmartPointer<>
。这有什么特别的原因吗?我现在习惯使用它们,我想知道它们的使用是否会导致某些问题?
例如,这是VolumeRenderer中使用的struct
:
struct userData
{
vtkRenderWindow *RenderWindow;
vtkRenderer *Renderer;
vtkAndroidRenderWindowInteractor *Interactor;
};
我只是尝试使用智能指针重新实现这个例子,到目前为止我还没有遇到任何问题,但我想知道这是不是一个好主意。 所以这就是我所拥有的完全相同的结构:
struct userData
{
vtkSmartPointer<vtkRenderWindow> RenderWindow;
vtkSmartPointer<vtkRenderer> Renderer;
vtkSmartPointer<vtkAndroidRenderWindowInteractor> Interactor;
};
提前致谢。
答案 0 :(得分:3)
在Android(或iOS)应用程序中使用vtkNew和/或vtkSmartPointer应该没有任何问题。在这种情况下,vtkNew看起来更合适并保持强大的所有权,如果你因为某些原因需要在外部设置这些成员,那么vtkSmartPointer就是你的选择。
有关哪个指针类适合的更多信息,我建议您查看此Source article
答案 1 :(得分:2)
它主要取决于userData的用例。使用vtkSmartPointer将递增ref计数器,因此只要userData有效,您将使其他指针也有效。但是,在这种情况下,您存储对渲染窗口对象的引用,这些对象可能因某些外部事件而消失,在这种情况下,您要考虑使用vtkWeakPointer。