Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带Android的vtkSmartPointer_C++_Android Ndk_Vtk - Fatal编程技术网

C++ 带Android的vtkSmartPointer

C++ 带Android的vtkSmartPointer,c++,android-ndk,vtk,C++,Android Ndk,Vtk,这可能是一个简单的问题,但在查看Android上所有示例的代码时,我注意到示例中根本没有使用vtkSmartPointer。有什么特别的原因吗?我现在已经习惯了使用它们,我想知道它们的使用是否会导致一些问题 例如,这是VolumeRenderer中使用的结构: struct userData { vtkRenderWindow *RenderWindow; vtkRenderer *Renderer; vtkAndroidRenderWindowInteractor *Interac

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

例如,这是VolumeRenderer中使用的
结构

struct userData
{
  vtkRenderWindow *RenderWindow;
  vtkRenderer *Renderer;
  vtkAndroidRenderWindowInteractor *Interactor;
};
我只是尝试只使用smartpointers重新实现这个示例,到目前为止我没有遇到任何问题,但我想知道这是否是一个好主意。 这就是我对完全相同的结构所做的:

struct userData
{
  vtkSmartPointer<vtkRenderWindow> RenderWindow;
  vtkSmartPointer<vtkRenderer> Renderer;
  vtkSmartPointer<vtkAndroidRenderWindowInteractor> Interactor;
};
struct userData
{
VTKSmart指针渲染窗口;
vtksmart指针渲染器;
vtksmart指针交互器;
};

提前感谢。

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


关于哪一个指针类是合适的,我建议看一看这一点,它主要取决于userData的用例。使用vtkSmartPointer将增加ref计数器,因此只要userData有效,其他指针也将有效。但是,在这种情况下,您正在存储对呈现窗口对象的引用,这些对象可能由于某些外部事件而消失,在这种情况下,您需要考虑使用vtkWistPosik.< /p>关于Android NDK的概念,但通常情况下,谁拥有指针是重要的。你确定userData是这里的最终所有者吗?不,老实说,我一点也不确定。刚刚开始深入研究代码,我仍然是VTK和NDK的初学者。但就最佳实践而言,我认为这将是一个好问题。特别是使用NDK,处理Segfault和内存管理问题是一个痛苦的问题,所以只是想知道它是否可能是任何一个发行版的来源,就像你一般需要在C++中更好地理解指针,然后才能研究一个联盟的NDK。我建议您熟悉内存管理的一般原则。正如我所说,谁拥有指针很重要。我理解并了解内存管理背后的理论,我知道智能指针通过自动处理内存的分配和取消分配,使内存管理变得更容易。我只能重复我自己。你需要真正理解它。到目前为止你还没有。你认为聪明的指针有点像银弹或仙粉。在你的代码中添加胡椒粉,它会自动地消除内存问题。没有什么比这更符合事实了。如果不知道指针的所有权(OP声称不知道),你的建议就是反建议。我认为这有点超出了问题的范围,当然你需要弄清楚所有权。事实仍然是,VTK中的智能指针类与Android NDK的预期工作一致,并且通常优于原始指针。@SergeyA我认为Marcus完美地回答了我的问题。我想知道VTK对android的偏好是什么,我不是在谈论它们在所有权方面的理论差异,我确实理解。谢谢你,马库斯。