与Android的vtkSmartPointer

时间:2015-11-02 14:36:26

标签: c++ android-ndk vtk

这可能是一个简单的问题但是,在查看Android上所有示例的代码时,我注意到示例中根本没有使用vtkSmartPointer<>。这有什么特别的原因吗?我现在习惯使用它们,我想知道它们的使用是否会导致某些问题?

例如,这是VolumeRenderer中使用的struct

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

我只是尝试使用智能指针重新实现这个例子,到目前为止我还没有遇到任何问题,但我想知道这是不是一个好主意。 所以这就是我所拥有的完全相同的结构:

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

在Android(或iOS)应用程序中使用vtkNew和/或vtkSmartPointer应该没有任何问题。在这种情况下,vtkNew看起来更合适并保持强大的所有权,如果你因为某些原因需要在外部设置这些成员,那么vtkSmartPointer就是你的选择。

有关哪个指针类适合的更多信息,我建议您查看此Source article

答案 1 :(得分:2)

它主要取决于userData的用例。使用vtkSmartPointer将递增ref计数器,因此只要userData有效,您将使其他指针也有效。但是,在这种情况下,您存储对渲染窗口对象的引用,这些对象可能因某些外部事件而消失,在这种情况下,您要考虑使用vtkWeakPointer。