- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用 C++ 编写程序。我有一个创建多个 vtkSmartPointers
的函数,如下所示:
vtkSmartPointer< vtkMRMLLinearTransformNode > transformNode =
vtkSmartPointer< vtkMRMLLinearTransformNode >::New();
vtkSmartPointer< vtkMRMLLinearTransformNode > transformNode2 =
vtkSmartPointer< vtkMRMLLinearTransformNode >::New();
在这个函数之外,我想要一个全局数组或 vtkMRMLLinearTransformNodes
vector ,我可以将 transformNode
和 transformNode2
添加到其中。以便稍后在代码中我可以在另一个函数中访问它们。
我无法理解我将如何做到这一点。这超出了我在指针方面的专业知识水平。谁能帮我吗?一点解释也可以帮助我填补对 vtkSmartPointers
的理解空白。
最佳答案
vtkSmartPointers 旨在传递(复制),您也可以创建一个数组,或者更好的是它们的容器(例如 std::vector)。
typedef vtkSmartPointer<vtkMRMLLinearTransformNode> NodePtr;
NodePtr CreateNode() {
NodePtr node = NodePtr::New();
node->ApplyTransform(xfm);
return node;
}
std::vector<NodePtr> nodes;
for (int i = 0; i < nNodes; ++i) {
nodes.push_back(CreateNode());
}
以同样直观的方式,您可以从函数返回智能指针 vector ,或将其作为参数传递给另一个函数。
唯一危险的事情是从函数返回时从 vtkSmartPointer 下方暴露原始指针。始终返回一个智能指针(就像上面的 CreateNode() 示例一样)。
vtkMRMLLinearTransformNode* BadFooWillCrash() {
NodePtr node = NodePtr::New();
// do something with node
// the smart pointer will go out of scope and the object will be deleted!
return node;
}
将原始指针作为参数非常好。
void WorkNode(vtkMRMLLinearTransformNode* node) {
// do something with node
}
NodePtr newNode = NodePtr::New();
WorkNode(newNode);
您也可以将智能指针作为参数传递
void WorkNode2(NodePtr node) {
// do something with node
}
这是因为在 vtk 中,引用计数器保存在对象本身内部,因此指针对象知道有多少指针指向它(您可以尝试 GetReferenceCount() 方法)。缺点是vtkSmartPointer要管理的对象必须派生自vtkObject。
您可以在此处找到更多信息 http://www.vtk.org/Wiki/VTK/Tutorials/SmartPointers
关于c++ - vtkSmartPointer 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42535600/
是否可以在调用析构函数之前释放 vtkSmartPointer(对象生命周期结束范围结束)? 我有一个类绘制某种类型的图。还有一个 close() 函数,它将关闭当前打开的窗口。但是,如果用户调用它,
用 C++ 编写程序。我有一个创建多个 vtkSmartPointers 的函数,如下所示: vtkSmartPointer transformNode = vtkSmartPointer::Ne
我从一个vtk类继承了一个类。该类的构造函数需要传递两个参数。我必须如何使用 New() 运算符? 谢谢 这是一个例子: class MyClass:vtkClass { MyClass(argume
什么可能是一个简单的问题,但在查看 Android 上所有示例的代码时,我注意到 vtkSmartPointer<>示例中根本没有使用。有什么特别的原因吗?我现在有点习惯使用它们了,我想知道使用它们是
我试图在 VTK 8.1 中使用 vtkDataArray 将标量字段存储在 vtkUnstructuredGrid 中,并最终将其写入文件。我正在通过 Visual Studio 2017 社区版编
我是一名优秀的程序员,十分优秀!