Array of vtkSmartPointers
Array of vtkSmartPointers
在C 中编写程序。我有一个函数,可以创建多个vtkSmartPointers
如下:
vtkSmartPointer< vtkMRMLLinearTransformNode > transformNode =
vtkSmartPointer< vtkMRMLLinearTransformNode >::New();
vtkSmartPointer< vtkMRMLLinearTransformNode > transformNode2 =
vtkSmartPointer< vtkMRMLLinearTransformNode >::New();
在此功能之外,我想具有vtkMRMLLinearTransformNodes
的全局数组或向量,我可以将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());
}
以相同的直观方式,您可以从函数返回SmartPointers的向量,或将其作为参数传递给另一个函数。
唯一危险的事情是在从功能返回时从VTKSMARTPOINTER下方的原始指针曝光。始终返回SmartPointer(就像上面的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);
同样,您可以将smartpointer作为参数
传递void WorkNode2(NodePtr node) {
// do something with node
}
这是因为在VTK中,参考计数器保留在对象本身内,因此Pointee对象知道有多少个指针指向它(您可以尝试GetReferenceCount()方法)。缺点是要由VTKSMARTPOINTER管理的对象必须从vtkobject派生。
您可以在这里找到一些更多信息http://www.vtk.org/wiki/vtk/tutorials/smartpointers
相关文章:
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- Deprecation of _writeBarrier()
- constexpr begin of a std::array
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- C++ "error: invalid use of void expression"
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 赛通"Cannot take address of memoryview slice"
- C++ Version Of Double.longBitsToDouble
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ Usage of AsyncCallback
- 错误:"Left of getValue must have class/struct/union"
- Centos7 g++ "to_string is not in a member of std"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 传递 std::vector of std::shared_ptr,而不是更新对象
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- Array of vtkSmartPointers