gpt4 book ai didi

c++ - vtkSmartPointer 数组

转载 作者:行者123 更新时间:2023-11-28 05:16:32 26 4
gpt4 key购买 nike

用 C++ 编写程序。我有一个创建多个 vtkSmartPointers 的函数,如下所示:

vtkSmartPointer< vtkMRMLLinearTransformNode > transformNode =
vtkSmartPointer< vtkMRMLLinearTransformNode >::New();
vtkSmartPointer< vtkMRMLLinearTransformNode > transformNode2 =
vtkSmartPointer< vtkMRMLLinearTransformNode >::New();

在这个函数之外,我想要一个全局数组或 vtkMRMLLinearTransformNodes vector ,我可以将 transformNodetransformNode2 添加到其中。以便稍后在代码中我可以在另一个函数中访问它们。

我无法理解我将如何做到这一点。这超出了我在指针方面的专业知识水平。谁能帮我吗?一点解释也可以帮助我填补对 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com