Android 的 vtkSmartPointer

vtkSmartPointer with Android

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

例如,这是在 VolumeRenderer 中使用的 struct

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

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

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

提前致谢。

在您的 Android(或 iOS)应用程序中使用 vtkNew and/or vtkSmartPointer 应该没有任何问题。在这种情况下,vtkNew 看起来更合适并保持强大的所有权,如果您出于某种原因需要在外部设置这些成员,那么 vtkSmartPointer 将是可行的方法。

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

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